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:
-
Relocating an Oracle database to another machine.
-
Moving Oracle database to new Storage media.
-
Renaming Oracle database.
Database Cloning can be done using the following methods,
-
Cold Cloning
-
Hot Cloning
-
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:
-
Startup the source database (if not open)$ export ORACLE_SID=RIS$ sqlplus / as sysdbaSQL> 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’ databaseSQL> 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.oradb_name=RISCLONcontrol_files=/u02/RISCLON/oradata/cntrl01.ctlbackground_dump_dest=/u02/RISCLON/bdumpuser_dump_dest=/u02/RISCLON/udump. . .. . .:wq!
-
Startup the clone database in NOMOUNT stage.$ export ORACLE_SID=RISCLONSQL> 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 ARCHIVELOGMAXLOGFILES 16MAXLOGMEMBERS 3MAXDATAFILES 100MAXINSTANCES 8MAXLOGHISTORY 292LOGFILEGROUP 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 pathSQL> @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)
)
)
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
SQL> 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.
No comments:
Post a Comment