Cloning

What is Cloning?

Database Cloning is a procedure that can be used to create an identical copy of the existing Oracle database. DBA sometimes need to clone databases to test backup and recovery strategies or export a table that was dropped from the production database and import it back into the production database. Cloning can be done on separate hosts or on the same host and is different from standby database.

Why cloning 

In every oracle development and production environment there will become the need to transport the entire database from one physical machine to another. This copy may be used for development, production testing, beta testing, etc, but rest assured that this need will arise and management will ask you to perform this task quickly. Listed below are the most typical uses:

a.Relocating an Oracle database to another machine.

b.Moving Oracle database to new Storage media.

c.Renaming Oracle database.

Database Cloning  the following methods,

a.Cold Cloning

b.Hot Cloning


c.RMAN Clonin


METHOD 1: COLD CLONING
Cold Cloning is one the reliable methods that is done using the Cold Backup. The drawback of this method is that the database has to be shutdown while taking the cold backup.

Considerations:
Source Database Name: RIS

Clone Database Name: RISCLON

Source Database physical files path=/u01/RIS/oradata

Cloned Database physical files path=/u02/RISCLON/oradata

Steps to be followed:
Startup the source database (if not open)

$ export ORACLE_SID=RIS

$ sqlplus / as sysdba

SQL> startup

Find out the path and names of datafiles, control files, and redo log files.

SQL> select name from v$datafile;

SQL> select member from v$logfile;

SQL> select name from v$controlfile;

Take the control file backup.

SQL> alter database backup controlfile to trace;

Parameter file backup.

If ‘RIS’ database is using spfile,

SQL> create pfile=’/u02/RISCLON/initRISCLON.ora’ from spfile;

If database is using pfile, use OS command to copy the pfile to a backup location.

Shutdown the ‘RIS’ database

SQL> shutdown

Copy all data files, control files, and redo log files of ‘RIS’ database to a target database location.

$ mkdir /u02/RISCLON/oradata

$ cp /u01/RIS/oradata/* /u02/RISCLON/oradata/

Create appropriate directory structure in clone database for dumps and specify them in the parameter file.

$ mkdir -p /u02/RISCLON/{bdump,udump}

Edit the clone database parameter file and make necessary changes to the clone database

$ cd /u02/RISCLON/

$ vi initRISCLON.ora

db_name=RISCLON

control_files=/u02/RISCLON/oradata/cntrl01.ctl

background_dump_dest=/u02/RISCLON/bdump

user_dump_dest=/u02/RISCLON/udump

. . .

. . .

:wq!

Startup the clone database in NOMOUNT stage.

$ export ORACLE_SID=RISCLON

SQL> startup nomount pfile=’/u02/RISCLON/initRISCLON.ora’

Create the control file trace for the clone database using the trace control file and specify the appropriate paths for redolog and datafiles.

CREATE CONTROLFILE SET DATABASE “RISCLON” RESETLOGS ARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 1 ‘/u02/RISCLON/oradata/redo01.log’ SIZE 5M,

GROUP 2 ‘/u02/RISCLON/oradata/redo02.log’ SIZE 5M,

DATAFILE

‘/u02/RISCLON/oradata/system01.dbf’,

‘/u02/RISCLON/oradata/undotbs01.dbf’,

‘/u02/RISCLON/oradata/sysaux01.dbf’,

‘/u02/RISCLON/oradata/users01.dbf’,

‘/u02/RISCLON/oradata/example01.dbf’

CHARACTER SET AL32UTF8

Create the control file by running from the trace path

SQL> @u01/RIS/source/udump/cntrl.sql

Once the control file’s successfully created, open the database with resetlogs option.

SQL> alter database open resetlogs;

METHOD 2: HOT CLONING
Hot database cloning is more suitable for databases which are running 24X7X365 type of databases and is done using the hot backup. For hot database cloning, database has to be in archivelog mode and there no need to shutdown the database.

Considerations:
Source Database Name: RIS

Clone Database Name: RISCLON

Source Database physical files path=/u01/RIS/oradata

Cloned Database physical files path=/u02/RISCLON/oradata

Steps to be followed:
1. Find out the path and names of datafiles.

SQL> select name from v$datafile;

2. Backup the parameter file

If ‘RIS’ database is using spfile create pfile,

SQL> create pfile=’/u02/RISCLON/initRISCLON.ora’ from spfile;

If database is using pfile, use OS command to copy the pfile to a backup location.

3. Note down the oldest log sequence number.

SQL> alter system switch logfile;

SQL> archive log list;

4. Place the database to backup mode

SQL> alter database begin backup;

5. Copy all data files of ‘RIS’ database to a clone location.

$ mkdir /u02/RISCLON/oradata

$ cp /u01/RIS/source/oradata/*.dbf /u02/RISCLON/oradata/

6. After copying all datafiles, release the database from backup mode.

SQL> alter database end backup;

7. Switch the current log file and note down the oldest log sequence number

SQL> alter system switch logfile;

SQL> archive log list;

8. Copy all archive log files generated during FIRST old log sequence no. to the LAST old log sequence no. during which the database was in backup mode.

9. Take the control file trace backup to the trace path

SQL> alter database backup controlfile to trace;

10. Create appropriate directory structure for the clone database and specify the same

$ cd /u02/RISCLON

$ mkdir bdump udump

11. Edit the clone database parameter file and make necessary changes to the clone database

$ cd /u02/RISCLON

$ vi initRISCLON.ora

db_name=RISCLON

control_files=/u02/RISCLON/oradata/cntrl01.ctl

background_dump_dest=/u02/RISCLON/bdump

user_dump_dest=/u02/RISCLON/udump

. . .

. . .

:wq!

12. Startup the cloned database in NOMOUNT phase.

$ export ORACLE_SID=RISCLON

SQL> startup nomount pfile=’/u02/RISCLON/initRISCLON.ora’

13. Create the control file for the clone database using the trace control file.

CREATE CONTROLFILE SET DATABASE “RISCLON” RESETLOGS ARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 1 ‘/u02/RISCLON/oradata/redo01.log’ SIZE 5M,

GROUP 2 ‘/u02/RISCLON/oradata/redo02.log’ SIZE 5M,

DATAFILE

‘/u02/RISCLON/oradata/system01.dbf’,

‘/u02/RISCLON/oradata/undotbs01.dbf’,

‘/u02/RISCLON/oradata/sysaux01.dbf’,

‘/u02/RISCLON/oradata/users01.dbf’,

‘/u02/RISCLON/oradata/example01.dbf’

CHARACTER SET AL32UTF8;

14. Create the control file by running trace file from the trace path

SQL> @u01/RIS/source/udump/cntrl.sql

15. Recover the database using backup controlfile option.

SQL> recover database using backup controlfile until cancel;

16. You will be prompted to feed the archive log files henceforth. Specify the absolute path and file name for the archive log files and keep feeding them until you cross the LAST old sequence no. (Refer: Step 8), type CANCEL to end the media recovery.

17. Open the database with resetlogs option.

SQL> alter database open resetlogs;

METHOD 3 : RMAN CLONING
RMAN provides the DUPLICATE command, which uses the backups of the database to create the clone database. Files are restored to the target database, after which an incomplete recovery is performed and the clone database is opened using RESETLOGS option. All the preceding steps are performed automatically by RMAN without any intervention from the DBA.

Considerations:
Source Database Name: RIS

Clone Database Name: RISCLON

Source Database physical files path=/u01/RIS/oradata

Cloned Database physical files path=/u02/RISCLON/oradata

Steps to be followed:
1. Parameter file backup.

If ‘RIS’ database is using spfile,

SQL> create pfile=’/u02/RISCLON/initRISCLON.ora’ from spfile;

If database is using pfile, use OS command to copy the pfile to a backup location.

2. Create appropriate directory structure for the clone database

$ cd /u02/RISCLON

$ mkdir bdump udump

3. Edit the clone database parameter file

$ cd /u02/RISCLON

$ vi initRISCLON.ora

db_name=RISCLON

control_files=/u02/RISCLON/oradata/cntrl01.ctl

db_file_name_convert=(‘/u01/RIS/oradata’,’/u02/RISCLON/oradata’)

# This parameter specifies from where to where the datafiles should be cloned

log_file_name_convert=(‘/u01/RIS/oradata’,’/u02/RISCLON/oradata’)

# This parameter specifies from where to where the redologfiles should be cloned

background_dump_dest=/u02/RISCLON/bdump

user_dump_dest=/u02/RISCLON/udump

. . .

. . .

:wq!

NOTE: db_file_name_convert and log_file_name_convert parameters are required only if the source database directory structure and clone database directory structure differs.

4. Configure the listener using ‘listener.ora’ file and start the listener

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(GLOBAL_DBNAME = RIS)

(ORACLE_HOME = /u01/oracle/product/10.2.0/db_1/)

(SID_NAME =RIS)

)

(SID_DESC =

(GLOBAL_DBNAME = RISCLON)

(ORACLE_HOME = /u02/oracle/product/10.2.0/db_1/)

(SID_NAME =RISCLON)

)

)

5. Add the following information to the ‘tnsnames.ora’ file.

con_RISCLON =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 200.168.1.22)(PORT = 1521))

)

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = RISCLON)

)

)

NOTE: Copy the backup pieces from the source server to destination server manually if youre cloned database is located in different server and configure the listener and tnsnames accordingly. If you had configured both environments in catalog database, the coping of backup is not necessary.

6. Startup the database in NOMOUNT stage and exit.

$ export ORACLE_SID=RISCLON

SQL> startup nomount pfile=’/u02/RISCLON/initRISCLON.ora’

SQL> exit

7. Start RMAN, make ‘RIS’ as target and ‘RISCLON’ as auxiliary.

$ export ORACLE_SID=RIS

$ rman target / auxiliary sys/sys@con_RISCLON

8. Issue the RMAN DUPLICATE command to start the cloning process.

RMAN> duplicate target database to ‘RISCLON’;


NOTE: The preceding command restores all files from the backup of the target database to the clone database destination using all available archive log files and also RMAN opens the clone database with resetlogs option. 
by Naveen Kumar S.R.

Comments