Thursday, October 29, 2015

Very good document CLONE DB USING RMAN

http://www.beyondoracle.com/2009/01/07/move-clone-copy-database-with-rman/ http://www.beyondoracle.com/2009/01/07/move-clone-copy-database-with-rman/ cloning a database from one server to another with different directory structures can be easily accomplished with RMAN. Imagine that you have a database on one node and you want to copy it to another node without shuting down your database and move your datafiles to a different directory structure… This will be demonstrated here by using RMAN. ASSUMPTIONS Source Database  10.2.0.4 database online (sid neo) at server1 (app)  archivelog mode is enabled  db datafiles are in the directory /opt/oracle/oradata/neo2  database will be backed up online with RMAN to /u01/backup Destiny Database  10.2.0.4 Oracle Home installed without any database running at server2 (mynode2.com)  db datafiles must be created / moved to different directory: /opt/oracle/oradata/neo  only the manual backup created at server1 will be moved to server2 AT SERVER1 Logon as oracle user software owner at server1 and set your environment variables. Then open RMAN and backup the source database we want to copy /move / clone. [oracle@neoface oracle]$ export ORACLE_HOME=/opt/oracle/product/10.2.0/db_1 [oracle@neoface oracle]$ export ORACLE_SID=neo [oracle@neoface oracle]$ export PATH=$ORACLE_HOME/bin:$PATH [oracle@neoface oracle]$ sqlplus “/ as sysdba” SQL> alter system switch logfile; SQL> exit; [oracle@neoface oracle]$ rman target / RMAN> backup database plus archivelog; The RMAN backup created the following files at /u01/backup: cf_NEO_c-1689570411-20090106-00 (control file backup) back_NEO_675389594_736_1 back_NEO_675389780_737_1 back_NEO_675390018_738_1 back_NEO_675390293_739_1 Copy those 5 backup files to server2 [oracle@neoface oracle]$ scp /u01/backup/back_NEO* root@mynode2.com:/u01/backup/ Create an initialization file (pfile) from the current spfile. Then copy it to the server2. [oracle@neoface oracle]$ sqlplus “/ as sysdba” SQL> create pfile from spfile; SQL> exit; [oracle@neoface oracle]$ scp /opt/oracle/product/10.2.0/db_1/dbs/initneo.ora oracle@mynode2.com:/opt/oracle/product/10.2.0/db_1/dbs/initneo.ora/ AT SERVER2 Logon at server2 to do the following steps:  create the OS directories to hold the datafiles and the admin log files and pfile:  edit the pfile to modify the instance name in parameters like bdump, udump, etc  change the onwership of pfile to belong to oracle user  connect to RMAN and startup the database in nomount mode  restore the control file from the backup  mount the database  validate catalog by crosschecking and cataloging the 4 backups pieces we copied  rename the datafiles and redolog files and restoring the database Switch to oracle user and create datafiles directories : [root@mynode2 root] su – oracle [oracle@mynode2 oracle]$ mkdir /opt/oracle/admin/neo -p [oracle@mynode2 oracle]$ cd /opt/oracle/admin/neo [oracle@mynode2 oracle]$ mkdir cdump udump bdump pfile [oracle@mynode2 oracle]$ mkdir /opt/oracle/oradata/neo -p Edit your pfile accordingly your new directory structure: [oracle@mynode2 oracle]$ vi /opt/oracle/product/10.2.0/db_1/dbs/initneo.ora Set environment variables and start working on RMAN: [oracle@mynode2 oracle]$ export ORACLE_HOME=/opt/oracle/product/10.2.0/db_1 [oracle@mynode2 oracle]$ export ORACLE_SID=neo [oracle@mynode2 oracle]$ export PATH=$ORACLE_HOME/bin:$PATH [oracle@mynode2 oracle]$ rman target / RMAN> startup nomount RMAN> restore controlfile from ‘/u01/backup/cf_NEO_c-1689570411-20090106-00′; RMAN> alter database mount ; RMAN> exit Now that the database is mounted, we’ll check the correct database SCN from the current log that we’ll use later to recover the database. Take note of your current SCN. [oracle@mynode2 oracle]$ sqlplus “/ as sysdba” SQL> select group#, first_change#, status, archived from v$log; GROUP# FIRST_CHANGE# STATUS ARC ---------- ------------- ---------------- --- 1 336565140 ACTIVE YES 2 336415067 CURRENT NO 3 336523814 INACTIVE YES SQL> exit; [oracle@mynode2 oracle]$ rman target / As we only copied to this server the backup we created at the beggining and we did not copy all the backups we had on server1 we must crosscheck the catalog against the OS files. Run the following commands at RMAN prompt : RMAN> CROSSCHECK backup; RMAN> CROSSCHECK copy; RMAN> CROSSCHECK backup of database; RMAN> CROSSCHECK backup of controlfile; RMAN> CROSSCHECK archivelog all; Now let’s catalog the 4 backup pieces that we copy to this server2: RMAN> CATALOG backuppiece ‘/u01/backup/back_NEO_675389594_736_1′; RMAN> CATALOG backuppiece ‘/u01/backup/back_NEO_675389780_737_1′; RMAN> CATALOG backuppiece ‘/u01/backup/back_NEO_675390018_738_1′; RMAN> CATALOG backuppiece ‘/u01/backup/back_NEO_675390293_739_1′; Next, as we changed the directory of our datafiles we must rename the redologs: RMAN> ALTER DATABASE rename file ‘/opt/oracle/oradata/neo2/redo01.log’ to ‘/opt/oracle/oradata/neo/redo01.log'; RMAN> ALTER DATABASE rename file ‘/opt/oracle/oradata/neo2/redo02.log’ to ‘/opt/oracle/oradata/neo/redo02.log'; RMAN> ALTER DATABASE rename file ‘/opt/oracle/oradata/neo2/redo03.log’ to ‘/opt/oracle/oradata/neo/redo03.log'; If you use BLOCK CHANGE TRACKING to allow fast incremental backups, and if you want to move the datafiles to different directory you must disable this feature and enabling it by specifying the new dir: RMAN> ALTER DATABASE disable block change tracking; RMAN> ALTER DATABASE enable block change tracking using file ‘/opt/oracle/oradata/neo/block_change_tracking.f'; This will avoid errors like ORA-19751 and ORA-19750 Now let’s run the script that will restore our database, renaming the datafiles and recovering until the archivelog with SCN 336415067, the current one. RMAN> run { set newname for datafile 1 to “/opt/oracle/oradata/neo/system01.dbf”; set newname for datafile 2 to “/opt/oracle/oradata/neo/undotbs01.dbf”; set newname for datafile 3 to “/opt/oracle/oradata/neo/sysaux01.dbf”; set newname for datafile 4 to “/opt/oracle/oradata/neo/data01.dbf”; set newname for datafile 5 to “/opt/oracle/oradata/neo/index01.dbf”; set newname for datafile 6 to “/opt/oracle/oradata/neo/users01.dbf”; set newname for datafile 7 to “/opt/oracle/oradata/neo/streams.dbf”; set newname for datafile 8 to “/opt/oracle/oradata/neo/data01brig.dbf”; set newname for datafile 9 to “/opt/oracle/oradata/neo/index02.dbf”; restore database; switch datafile all; recover database until scn 336415067; } RMAN> ALTER DATABASE open resetlogs; I didn’t manage to avoid errors like ORA-01110 and ORA-01180 at RMAN without using the “until” clause in the “recover database” sentence instead, like most people use it, as the first instruction after the run command. Later I’ll upload a video for you easily see it running flawlessly Btw, HAPPY NEW YEAR!!!! PS: to provide better look and offer my reader more resources, my site is now supported by advertising. If you feel that it very annoying, please give me some feedback. If you think it deserves to be clicked… just do it (2011/07/20) updated to issue a switch logfile before database backup and avoid errors “RMAN-06026: some targets not found – aborting restore” and “RMAN-06023: no backup or copy of datafile 1 found to restore”

No comments:

Post a Comment