Oracle10g Database Cloning


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)

)

)

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.

This entry was posted in Oracle. Bookmark the permalink.

57 Responses to Oracle10g Database Cloning

  1. Anonymous says:

    Hi Naveen,

    Very useful document.

  2. Anonymous says:

    Hello Naveen,

    Thanks for sharing this blog , can u pls share the some blog related to datagurd creation (physical standby)

  3. Anonymous says:

    Hi Sir,

    First thanks a lot giving this knowledge for us, and can you please post the step by step of PHYSICAL STANDBY DATA GUARD configuration… i am trying but failing configuring properly…
    Thank you.

  4. Dinesh says:

    Hi Naveen ;

    Thanks for your supreb work.

    What i have observed in HOT backup , you did not take control file backup.
    I tried what you done in this blog ? I am getting error.

    1) how he target database to know about the source archive log files to perform recovery ?

    SYS>recover database using backup controlfile until cancel;
    ORA-00279: change 533291 generated at 10/22/2014 01:41:28 needed for thread 1
    ORA-00289: suggestion :
    /u01/app/oracle/flash_recovery_area/SAMP/archivelog/2014_10_22/o1_mf_1_12_%u_.arc
    ORA-00280: change 533291 for thread 1 is in sequence #12

    Specify log: {=suggested | filename | AUTO | CANCEL}
    auto
    ORA-00308: cannot open archived log
    ‘/u01/app/oracle/flash_recovery_area/SAMP/archivelog/2014_10_22/o1_mf_1_12_%u_.arc’
    ORA-27037: unable to obtain file status
    Linux Error: 2: No such file or directory
    Additional information: 3

    ORA-00308: cannot open archived log
    ‘/u01/app/oracle/flash_recovery_area/SAMP/archivelog/2014_10_22/o1_mf_1_12_%u_.arc’
    ORA-27037: unable to obtain file status
    Linux Error: 2: No such file or directory
    Additional information: 3

    ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
    ORA-01195: online backup of file 1 needs more recovery to be consistent
    ORA-01110: data file 1: ‘/u01/app/oracle/oradata/samp/system01.dbf’

    MY source database archivelogs format are

    cd /u01/app/oracle/flash_recovery_area/SHAM/archivelog/2014_10_21/
    [oracle@oel5 2014_10_21]$ ls -l
    total 12256
    -rw-r—– 1 oracle oinstall 1024 Oct 21 20:36 o1_mf_1_10_b4dxncmq_.arc
    -rw-r—– 1 oracle oinstall 1024 Oct 21 20:36 o1_mf_1_11_b4dxndvx_.arc
    -rw-r—– 1 oracle oinstall 8578560 Oct 21 18:42 o1_mf_1_2_b4dpy6w6_.arc
    -rw-r—– 1 oracle oinstall 3112960 Oct 21 20:07 o1_mf_1_3_b4dvxp2s_.arc
    -rw-r—– 1 oracle oinstall 233472 Oct 21 20:20 o1_mf_1_4_b4dwo9vd_.arc
    -rw-r—– 1 oracle oinstall 1024 Oct 21 20:21 o1_mf_1_5_b4dwq49p_.arc
    -rw-r—– 1 oracle oinstall 2048 Oct 21 20:21 o1_mf_1_6_b4dwr5nn_.arc
    -rw-r—– 1 oracle oinstall 568320 Oct 21 20:36 o1_mf_1_7_b4dxn4gq_.arc
    -rw-r—– 1 oracle oinstall 1024 Oct 21 20:36 o1_mf_1_8_b4dxn5k9_.arc
    -rw-r—– 1 oracle oinstall 1536 Oct 21 20:36 o1_mf_1_9_b4dxnbby_.arc

    but oracle is expection archive logs as ‘dbf’ format.

    If we dont take control file backup , cannot perform hot backup. I think so and more over
    source db and clone db archives format are obsoletely same

    SYS>show parameter log_archive_format;

    NAME TYPE VALUE
    ———————————— ———– ————–
    log_archive_format string %t_%s_%r.dbf

    Thanks

  5. Anonymous says:

    Hi sir,
    First of all thanks a lot to you by sharing the knowledge…

    then, when i follow the rman cloning, i got the bellow errors .. pls help me..
    thank you..

    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: failure of Duplicate Db command at 09/05/2014 09:56:05
    RMAN-05501: aborting duplication of target database
    RMAN-03015: error occurred in stored script Memory Script
    RMAN-06026: some targets not found – aborting restore
    RMAN-06023: no backup or copy of datafile 8 found to restore

  6. bala says:

    Am a fresher to oracle. Do we need to create a new database for clone. AM following cold cloning process and struck in step 9. please explain

    • Naveen K. SR says:

      Hi Bala.

      Cold copy means copying the entire one database physical files of shutdown database to create another database. So when u open the cloned database, there’s database will be created in another location or in another server

      • bala says:

        my environment is windows. am creating cloned database in another location of same server. now my question is how to connect to that database through sql when it is not created. pls help me out

      • bala says:

        The error is for not having an oracle service. my env is windows. pls suggest. Iam stuck in the middle of the activity and my deadline is by tomm. pls pls help

      • bala says:

        i am getting TNS protocol adapter error. i have done changes in tnsnames.ora file also. pls pls help

  7. vaibhav says:

    Hi Naveen,

    After RMAN cloning require DBID change or not ?

  8. NaveenKumar M says:

    Hi naveen,this is usefull article for different cloning methods please tell me the steps to clone database manually at our home pc, i have cloned the database with clone option provided in VM ware but i am not able to configure network between source and clone please tell me the steps

  9. Anil says:

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

  10. Roberto says:

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

  11. Peeyush says:

    Hi Naveen, Very Useful document-Thanks
    Peeyush Dang

  12. DB DB says:

    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.

  13. DB DB says:

    Well Explained naveen .. Thanks.

  14. Anonymous says:

    Thanks Naveen…very usefull

  15. nishant says:

    hi again solved my problem.thanks.

  16. nishant says:

    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.

    • you need to change the statement ‘CREATE CONTROLFİLE REUSE…….. to ‘ CREATE CONTROL FİLE SET….’ . just replace the word REUSE TO SET.
      Reason: we are cloning database means we are creating new db and here in the statement if you use ‘REUSE’ which is actually use for recovering controlfile.
      so to clone db we have to create new control file using SET command in the first line..

  17. 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 says:

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

  18. Anonymous says:

    many thanks naveen for oracle database cloning method

  19. Anonymous says:

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

  20. Anonymous says:

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

  21. sekhar says:

    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,

  22. Aneel Ahmed says:

    Thanks alot Naveen🙂 Keep it up

  23. leena says:

    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 says:

      Hi Leena,

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

    • leena says:

      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 says:

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

  24. Appaa says:

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

  25. harish says:

    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 says:

      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

  26. Prathap says:

    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 says:

      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…

  27. zain khan says:

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

    Zain.

  28. shreekant says:

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

  29. srikanth says:

    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

  30. Ramakrishna says:

    Hi Naveen,

    Nice documentation. Thanks a lot.

  31. shymon says:

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

  32. Somphone Xayasomloth says:

    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.

  33. raja says:

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

  34. SURYACHANDAR says:

    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