Thursday, June 27, 2013

Cold Cloning of Database

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.

Cosiderations-
Source Database Name: orcl
Clone Database Name: testdb

Steps to be followed-
#Create pfile
#Create controlfile
#Shutdown the dataabase
#Copy the datafile to the new location
#Start the db in nomount using the newly created pfile
#Execute the controlfile which is created
#Recover the database
#Open the database in resetlogs

Create the pfile in the default location.
SQL> show parameter pfile
NAME    TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile    string      /home/app/oracle/product/10.2.0/db_1/dbs/spfileorcl.ora

SQL> create pfile='/home/app/oracle/product/10.2.0/db_1/dbs/inittestdb.ora' from spfile;
File created.

Make the parameter changes
[oracle@localhost dbs]$ vi inittestdb.ora
orcl.__db_cache_size=201326592
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__shared_pool_size=71303168
orcl.__streams_pool_size=0
*.audit_file_dest='/home/app/oracle/admin/orcl/adump'
*.background_dump_dest='/home/app/oracle/admin/orcl/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/home/app/oracle/oradata/orcl/control01.ctl','/home/app/oracle/oradata/orcl/control02.ctl','/home/app/oracle/oradata/orcl/control03.ctl'
*.core_dump_dest='/home/app/oracle/admin/orcl/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='orcl'
*.db_recovery_file_dest='/home/app/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.job_queue_processes=10
*.open_cursors=300
*.pga_aggregate_target=94371840
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=285212672
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/home/app/oracle/admin/orcl/udump'

Create the dump folder
[oracle@localhost ~]$ mkdir /home/app/oracle/admin/testdb
[oracle@localhost ~]$ cd /home/app/oracle/admin/testdb
[oracle@localhost testdb]$ pwd
/home/app/oracle/admin/testdb
[oracle@localhost testdb]$ mkdir adump bdump cdump udump

[oracle@localhost testdb]$ pwd
/home/app/oracle/oradata/testdb

[oracle@localhost testdb]$ cd /home/app/oracle/flash_recovery_area
[oracle@localhost flash_recovery_area]$ mkdir testdb
[oracle@localhost flash_recovery_area]$ cd testdb
[oracle@localhost testdb]$ pwd
/home/app/oracle/flash_recovery_area/testdb

[oracle@localhost testdb]$
[oracle@localhost dbs]$ vi inittestdb.ora
[oracle@localhost dbs]$ cat inittestdb.ora
testdb.__db_cache_size=201326592
testdb.__java_pool_size=4194304
testdb.__large_pool_size=4194304
testdb.__shared_pool_size=71303168
testdb.__streams_pool_size=0
*.audit_file_dest='/home/app/oracle/admin/testdb/adump'
*.background_dump_dest='/home/app/oracle/admin/testdb/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/home/app/oracle/oradata/testdb/control01.ctl','/home/app/oracle/oradata/testdb/control02.ctl','/home/app/oracle/oradata/testdb/control03.ctl'
*.core_dump_dest='/home/app/oracle/admin/testdb/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='testdb'
*.db_recovery_file_dest='/home/app/oracle/flash_recovery_area/testdb/'
*.db_recovery_file_dest_size=2147483648
*.dispatchers='(PROTOCOL=TCP) (SERVICE=testdbXDB)'
*.job_queue_processes=10
*.open_cursors=300
*.pga_aggregate_target=94371840
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=285212672
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/home/app/oracle/admin/testdb/udump'

Create the directory to store the datafile and redolog file.
Check the datafile and redolog file names
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/home/app/oracle/oradata/orcl/system01.dbf
/home/app/oracle/oradata/orcl/undotbs01.dbf
/home/app/oracle/oradata/orcl/sysaux01.dbf
/home/app/oracle/oradata/orcl/users01.dbf
/home/app/oracle/oradata/orcl/example01.dbf

SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
/home/app/oracle/oradata/orcl/redo03.log
/home/app/oracle/oradata/orcl/redo02.log
/home/app/oracle/oradata/orcl/redo01.log

[oracle@localhost ~]$ cd /home/app/oracle/oradata/
[oracle@localhost oradata]$ ls
orcl

[oracle@localhost oradata]$ mkdir testdb
[oracle@localhost oradata]$ cd testdb
[oracle@localhost testdb]$ pwd
/home/app/oracle/oradata/testdb

Create the controlfile script.
SQL> alter database backup controlfile to trace as '/home/oracle/testdbctl.sql';
Database altered.

Make necessary changes in the controlfile script.
[oracle@localhost dbs]$ cat /home/oracle/testdbctl.sql
CREATE CONTROLFILE SET DATABASE "TESTDB" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/home/app/oracle/oradata/testdb/redo01.log'  SIZE 50M,
  GROUP 2 '/home/app/oracle/oradata/testdb/redo02.log'  SIZE 50M,
  GROUP 3 '/home/app/oracle/oradata/testdb/redo03.log'  SIZE 50M
DATAFILE
  '/home/app/oracle/oradata/testdb/system01.dbf',
  '/home/app/oracle/oradata/testdb/undotbs01.dbf',
  '/home/app/oracle/oradata/testdb/sysaux01.dbf',
  '/home/app/oracle/oradata/testdb/users01.dbf',
  '/home/app/oracle/oradata/testdb/example01.dbf'
CHARACTER SET WE8ISO8859P1
;

Shutdown the database
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

Copy the datafiles and redologfile(/home/app/oracle/oradata/orcl/) to the new directory(/home/app/oracle/oradata/testdb).
[oracle@localhost orcl]$ pwd
/home/app/oracle/oradata/orcl
[oracle@localhost orcl]$ cp *.dbf /home/app/oracle/oradata/testdb/

Export the sid parameter and start the database in nomount state
[oracle@localhost ~]$ export ORACLE_SID=testdb
[oracle@localhost dbs]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Jun 26 10:20:06 2013

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup nomount pfile='$ORACLE_HOME/dbs/inittestdb.ora';
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1218992 bytes
Variable Size              79693392 bytes
Database Buffers          201326592 bytes
Redo Buffers                2973696 bytes

Execute the controlfile script which is created
SQL> @/home/oracle/testdbctl.sql
Control file created.

Apply the log file which is at current state in the old database(orcl)
SQL> select * from v$log where status='CURRENT';
GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS  ARC    STATUS
---------- ---------- ---------- ---------- ---------- --- ----------------
FIRST_CHANGE#    FIRST_TIM
------------- ---------
  3              1                  7                52428800      1          NO    CURRENT
 502135               05-MAR-13

Recover the database now and apply the current logfile.
SQL> recover database using backup controlfile until cancel;
ORA-00279: change 501827 generated at 20/06/2013 08:37:10 needed for thread 1
ORA-00289: suggestion :
/home/app/oracle/flash_recovery_area/testdb/SCHOOL/archivelog/2013_20_06/o1_mf_1
_6_%u_.arc
ORA-00280: change 501827 for thread 1 is in sequence #6

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/home/app/oracle/oradata/orcl/redo03.log
Log applied.
Media recovery complete.

Open the database in reset logs.
SQL> alter database open resetlogs;
Database altered.

Check the database state.
SQL> select name,open_mode from v$database;
NAME      OPEN_MODE
--------- ----------
TESTDB    READ WRITE



No comments:

Post a Comment