Label

Thursday, July 11, 2013

RMAN Duplicate Database



Here source db name is SRDB and clone db name is CLONEDB.

Points to make sure.
a)      Source database must be in archivelog mode.
b)      Database must have a good full db backup.
c)       If the server is different we need to move backupsets, archivelogs and onlinelogs from source to destination directory, make sure directory structure of these remains same on destination with source.

d)      Database versions should be same if not at the end of cloning we have an error clone database should be started in upgrade mode. 

Connect to SRDB .
1.       Create pfile from spfile on source database for clone db.

SQL> create pfile from spfile;
File created.
Copy the pfile from old $ORACLE_HOME/dbs to new one or the new db which is cloned should exist in the same ORACLE_HOME, rename it to init<dbname>.ora having a backup.

2.       Edit the pfile . Some parameters need to be added and some needs to be changed.
if the directory structures are different  in case of same server add these  parameters. (DB_FILE_NAME_CONVERT, LOG_FILE_NAME_CONVERT ).
Replace word source db name (SRDB) with clone db name (CLONEDB).

3.       Create directories for clone db.
For adump.
[oracle@TDCVM07S03 dbs]$ mkdir -p /oracle/app/oracle/admin/clonedb/adump
For database files.
[oracle@TDCVM07S03 oradata]$ mkdir clonedb
For  fast_recovery_area / flash_recovery_area
                If it is 11.2.0.1  -- flash_recovery_area
                If it is 11.2.0.2 / 11.2.0.3 – fast_recovery_area
[oracle@TDCVM07S03 flash_recovery_area]$ mkdir clonedb

4.       Create password file  or make a copy of existing source db(SRDB) ORAPWSRDB password file and rename it to ORAPWCLONEDB
Create new password file by orapwd ---
[oracle@TDCVM07S03 bin]$ orapwd file=$ORACLE_HOME/dbs/orapwclonedb password=XXXXXXX entries=5
Copy the existing password file  ---
[oracle@TDCVM07S03 dbs]$ mv orapwsrdb orapwclonedb

5.       Create new db service clonedb from another terminal and hold the db in nomount stage.
n  In Linux
Add entry of clonedb in oratab file  --  vi /etc/oratab
[oracle@TDCVM07S03 bin]$ export ORACLE_SID=clonedb
[oracle@TDCVM07S03 bin]$ sqlplus "/as sysdba"
SQL*Plus: Release 11.2.0.1.0 Production on Tue Jul 2 21:58:02 2013
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
Connected to an idle instance.
SQL> startup nomount
ORACLE instance started.
Total System Global Area  217157632 bytes
Fixed Size                  2211928 bytes
Variable Size             159387560 bytes
Database Buffers           50331648 bytes
Redo Buffers                5226496 bytes

n  In Windows
C:\>set ORACLE_HOME=c:\app\admin\product\11.2.0\dbhome_1
C:\>set ORACLE_SID=CLONEDB
C:\>set PATH=%ORACLE_HOME/bin%;%PATH%
C:\>oradim -new -sid clonedb -intpwd oracle -startmode Manual
Instance created.
C:\> sqlplus "/as sysdba"

SQL*Plus: Release 11.2.0.1.0 Production on Tue Jul 2 21:58:02 2013
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
Connected to an idle instance.
SQL> startup nomount
ORACLE instance started.
Total System Global Area  217157632 bytes
Fixed Size                  2211928 bytes
Variable Size             159387560 bytes
Database Buffers           50331648 bytes
Redo Buffers                5226496 bytes

6.       Edit listener.ora and tnsnames.ora
Statically register the clonedb dbname with the listener and restart it.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (ORACLE_HOME = /oracle/app/oracle/product/11.2.0/dbhome_1)
      (SID_NAME = srdb)
      (ORACLE_HOME = /oracle/app/oracle/product/11.2.0/dbhome_1)
      (SID_NAME = clonedb)
    )
  )           

Add TNS entry in tnsnames.ora .
CLONEDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST =xx.xx.xx.xx)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = clonedb)
    )
  )

7.       Connect to target terminal clonedb   --   Duplicate target database to clone.

SQL> host rman

Recovery Manager: Release 11.2.0.1.0 - Production on Tue Jul 2 22:00:15 2013

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
RMAN> connect target sys/xxxxxx@srdb

connected to target database: SRDB (DBID=2167491995)

RMAN> connect auxiliary sys/xxxxxx@clonedb

connected to auxiliary database: CONEDB (not mounted)

RMAN> duplicate target database to clonedb ;


** Duplicate target database command doesnot include spfile and nofilenamecheck keywords.
·         Database started from pfile that's why no spfile command included.
·         Target db conedb directory structure is different that’s why nofilenamecheck command is included.