RSS

Oracle10g Database Cloning

15 Oct

What is Cloning?

Database Cloning is a procedure that can be used to create an identical copy of the existing Oracle database. DBA’s 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.

Reason for 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:

  1. Relocating an Oracle database to another machine.

  2. Moving Oracle database to new Storage media.

  3. Renaming Oracle database.

Database Cloning can be done using the following methods,

  1. Cold Cloning

  2. Hot Cloning

  3. RMAN Cloning

Here is a brief explanation how to perform cloning in all these three methods

 

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:

  1. Startup the source database (if not open)

    $ export ORACLE_SID=RIS

    $ sqlplus / as sysdba

    SQL> startup

     

  2. 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;

     

  3. Take the control file backup.

    SQL> alter database backup controlfile to trace;

     

  4. 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.

  5. Shutdown the ‘RIS’ database

    SQL> shutdown

     

  6. 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/

     

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

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

     

  8. 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!

     

  9. Startup the clone database in NOMOUNT stage.

    $ export ORACLE_SID=RISCLON

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

     

  10. 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

     

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

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

     

  12. 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)

)

)

 

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.

 

About these ads
 
38 Comments

Posted by on October 15, 2010 in Oracle

 

38 responses to “Oracle10g Database Cloning

  1. Anil

    March 5, 2014 at 10:33 PM

    hi naveen !!!
    This is very useful for me can you please say something about data guard.

     
  2. Roberto

    January 23, 2014 at 10:42 AM

    Hi Naveen,
    This article is awesome!, it helps me a lot practicing differents way to do a clone. Just I have some troubles at the rman cloning in the last part when trying connect target and auxiliary. The way i solved was export ORACLE_SID to target then connect target sys/pwd@origin auxiliary /

    greetings from México!!

     
  3. Peeyush

    November 18, 2013 at 2:12 AM

    Hi Naveen, Very Useful document-Thanks
    Peeyush Dang

     
  4. DB DB

    October 18, 2013 at 12:43 PM

    Hello Naveen;

    My original db is no archive log mode.
    When executing create control file script by default , i am getting numeric number why ?

    @/u01/backup/control01.sql; — >
    18

    1) Can i use below script if my database is no archivelog ?

    —————————————

    CREATE CONTROLFILE SET DATABASE “ORCLTEST” RESETLOGS NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
    LOGFILE
    GROUP 1 ‘/u01/app/oracle/oradata/orcltest/redo01.log’ SIZE 50M,
    GROUP 2 ‘/u01/app/oracle/oradata/orcltest/redo02.log’ SIZE 50M,
    GROUP 3 ‘/u01/app/oracle/oradata/orcltest/redo03.log’ SIZE 50M
    DATAFILE
    ‘/u01/app/oracle/oradata/orcltest/system01.dbf’,
    ‘/u01/app/oracle/oradata/orcltest/undotbs01.dbf’,
    ‘/u01/app/oracle/oradata/orcltest/sysaux01.dbf’,
    ‘/u01/app/oracle/oradata/orcltest/users01.dbf’,
    ‘/u01/app/oracle/oradata/orcltest/example01.dbf’
    CHARACTER SET WE8ISO8859P1

    ———-

    Thanks.

     
    • Anonymous

      December 18, 2013 at 11:04 AM

      My dear friend u need to keep ur db in archive log mode

       
  5. DB DB

    October 18, 2013 at 10:36 AM

    Well Explained naveen .. Thanks.

     
  6. Anonymous

    September 22, 2013 at 11:21 AM

    Thanks Naveen…very usefull

     
  7. nishant

    September 19, 2013 at 10:55 PM

    hi again solved my problem.thanks.

     
  8. nishant

    September 19, 2013 at 10:46 PM

    hello sir your articles are more than enough to help others. in case of cold cloning i got stuck in this last step. what should i do to correct it.

    sql> @ /u02/orclon.sql;

    CREATE CONTROLFILE REUSE DATABASE “ORCLON” RESETLOGS ARCHIVELOG
    *
    ERROR at line 1:
    ORA-01503: CREATE CONTROLFILE failed
    ORA-01161: database name ORCL in file header does not match given name of
    ORCLON
    ORA-01110: data file 1: ‘/u02/app/oracle/oradata/orclon/system01.dbf’

    and keep rolling with your efforts.

     
  9. ravichintalas

    August 6, 2013 at 7:07 PM

    Hi Naveen, Ur article gave me detailed understanding of the cloning process from one to another.
    I got an error while creating the control file (COLD CLONING). Hope can help me on this. Thanks.

    ################################################################
    ERROR:

    CREATE CONTROLFILE SET DATABASE “SLIST” RESETLOGS NOARCHIVELOG
    *
    ERROR at line 1:
    ORA-01503: CREATE CONTROLFILE failed
    ORA-01565: error in identifying file ‘/oracfg/SLIST/system01.dbf’
    ORA-27046: file size is not a multiple of logical block size
    Additional information: 1
    Additional information: 524292058
    Additional information: 8192
    ##############################################################

    I have copied all the dbf files from another server when the DB is shutdown.
    I have checked the Oracle user has read n write permission for all the dbf files.

     
    • Naveen K. SR

      August 15, 2013 at 11:44 AM

      Hi Ravi

      The error “ORA-01565: error in identifying file ‘/oracfg/SLIST/system01.dbf’” states that you have missed the system datafile while coping to the new server.

      Try to copy all the files properly and then give a try, it will work

      Best of luck….

       
      • ravichintalas

        August 15, 2013 at 2:04 PM

        Hi Naveen,

        Thanks for the reply. I have tried to copy few times but got the same error. So, I had to go for RMAN backup which solved my problem. Once again thank you.

         
  10. Anonymous

    August 5, 2013 at 6:32 PM

    many thanks naveen for oracle database cloning method

     
  11. Anonymous

    August 5, 2013 at 6:31 PM

    many thank for your concept of explanation is very nice. i need a link same as for oracle 11g data guard step by step

     
  12. Anonymous

    August 5, 2013 at 6:28 PM

    Naveen many thank for your document clonning can you please provide me the link of data guard of 11g for EBS

     
  13. sekhar

    June 6, 2013 at 12:29 AM

    Hi Naveen,

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

    In the above stop no need to copy control files and you are recreating them.

    Thanks,

     
  14. Aneel Ahmed

    May 19, 2013 at 3:19 PM

    Thanks alot Naveen :) Keep it up

     
  15. leena

    April 23, 2013 at 12:37 AM

    Sir these cloning notes r very informative n easy to understand but m stucking at 7th point, will this command run on sql prompt?

     
    • Naveen K. SR

      April 23, 2013 at 9:30 PM

      Hi Leena,

      Thank u for notifying me on the typos’ and have corrected it. You helped others.

       
    • leena

      April 26, 2013 at 9:26 PM

      Hello Sir, after executing last command i’m getting this error :
      RMAN-04006: error from auxiliary database: ORA-12528: TNS:listener: all appropriate instances are blocking new connections

      what should I do?

       
      • Naveen K. SR

        April 27, 2013 at 8:29 AM

        Please check the listener settings and tnsnames entry properly between Source and Target. And, dont forget to start the listener on both the ends before executing the RMAN commands. This will resolve ur problem..

         
  16. Appaa

    April 1, 2013 at 12:17 PM

    Hi Naveen.. Its smiply super’b as I didn’t find any where even in many google searche’s..with this much of clarity.

    thanks alot..

     
  17. harish

    December 14, 2012 at 1:20 AM

    hi

     
  18. harish

    December 14, 2012 at 1:19 AM

    hi this is harish,i set the FRA for the target database and i taken backup using rman and it is showing in list command but, i am getting rman errors 569,571,3002,3015,6023,6026.

     
    • Naveen K. SR

      December 25, 2012 at 8:03 AM

      Hi Harish

      I am not sure about the background of this error. Give a small try like here..

      SQL> alter system flush shared_pool;

      System altered.

      SQL> exit

      Then you start the restore, hope it will help you

       
  19. Prathap

    October 15, 2012 at 6:14 PM

    Hi Naveen,
    in your Rman cloning why you dont copy the backup to cloning server. is it not mandatory? then from where the database is restoring, from target database backup or active datafiles? But you mentioned “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” plese explanin me, iam confused.

     
    • Naveen K. SR

      December 25, 2012 at 8:00 AM

      Hi Prathap

      If your cloning across different servers; YES, you need to copy the to the server. In my article, I am cloning in the same server. So it was not shown about the copying…In the Note, I had spoken about the databases but not across servers…

       
  20. zain khan

    September 25, 2012 at 5:05 AM

    Hi Naveen this is zain, nice to see your blog, its informative. i want your email id i have some doubts in dba .

    Zain.

     
  21. shreekant

    July 18, 2012 at 4:03 PM

    thank you sir its really helpful…I havent got these methods in my dba course even

     
  22. srikanth

    May 26, 2012 at 11:56 AM

    hi naveen
    it’s very usefull documention for freshers and experiences persons
    and
    never see like this information very easy understanding

    than Q and good job

     
  23. Ramakrishna

    March 27, 2012 at 4:00 PM

    Hi Naveen,

    Nice documentation. Thanks a lot.

     
  24. shymon

    February 22, 2011 at 1:17 PM

    Hi naveen your steps for clonning help me lot in practice i needsome of troubleshooting topic from your blogspot..

     
  25. Somphone Xayasomloth

    February 17, 2011 at 2:18 AM

    Hi Naveen,

    It’s perfect and very useful. How about cloning from RAC to Single instance RAC using hot backup without RMAN, by issuing the commande
    RECOVER AUTOMATIC DATABASE UNTIL CHANGE USING BACKUP CONTROLFILE ?

    Thank you so much in advance and have a good day !

    Somphone X.

     
  26. raja

    February 12, 2011 at 5:31 PM

    HI naveen
    it is very useful for me thanks and can you please post how to create standby database through RMAN or any way

     
    • Naveen K. SR

      February 16, 2011 at 5:45 PM

      Hi Raja

      RMAN standby will be same as RMAN cloning only you need to add some parameters for archivelog dest. Follow the documentation on implementing standby, you come across the parameters and the way of copying the standby database is same method as I have show here

      I will be posting more about Data Guard implementation…

      –Naveen K. SR

       
    • Naveen

      March 23, 2011 at 12:39 PM

       
  27. SURYACHANDAR

    January 28, 2011 at 9:16 PM

    your steps for CLONING database helped alot so i want procedural steps for upgradation and patching in oracle 10g

     

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
Follow

Get every new post delivered to your Inbox.

Join 25 other followers

%d bloggers like this: