In previous versions, the only way to use Active Duplicate was with "image copies". However Oracle 12c introduced a new feature for Active Duplicate operations, now it is possible to do the duplication of the database with BackupSets. This way we avoid to transfer the complete file through the network. Using BackupSets allows oracle to use the special format in order to skip unused blocks, committed undo blocks etc..
In this article we will do an example about how to use it.
Firstable, let me show you my target database (the database that is being refreshed):
[oracle@db12102 Backup]$ ps -ef |grep pmon
grid 5928 1 0 00:20 ? 00:00:00 asm_pmon_+ASM
oracle 11659 1 0 01:25 ? 00:00:00 ora_pmon_db1
[oracle@db12102 Backup]$
Now I will create a parameter file of my database in order to build a new instance similar than "db1":
[oracle@db12102 Backup]$ sqlplus / as sysdba
SQL> create pfile='$ORACLE_HOME/dbs/initdb2.ora' from spfile;
File created.
I adapted the parameters inside the parameter file and now we are ready to start the "auxiliary" instance:
SQL> startup nomount pfile='$ORACLE_HOME/dbs/initdb2.ora';
ORACLE instance started.
Total System Global Area 767557632 bytes
Fixed Size 2929112 bytes
Variable Size 310382120 bytes
Database Buffers 448790528 bytes
Redo Buffers 5455872 bytes
SQL>
The auxiliary Instance is called "db2":
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
db2
I will create a Password File :
[oracle@db12102 Backup]$ cd $ORACLE_HOME/dbs
[oracle@db12102 dbs]$ orapwd file=orapwdb2 password=manager1
I will create an Static Services using NETMGR:
[grid@db12102 dbs]$ netmgr
The Services look this way:
[oracle@db12102 dbs]$ lsnrctl services
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 29-MAY-2016 02:13:18
Copyright (c) 1991, 2014, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
Services Summary...
Service "db2" has 1 instance(s).
Instance "db2", status UNKNOWN, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:221 refused:0
LOCAL SERVER
Now I will configure my tnsnames.ora file to create an entry for every database:
[oracle@db12102 dbs]$ cat $ORACLE_HOME/network/admin/tnsnames.ora
DB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db12102)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = db1)
)
)
DB2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db12102)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = db2)
(UR = A)
)
)
[oracle@db12102 dbs]$
Now we are ready to raise the duplicate operation:
oracle@db12102 ~]$ rman target sys/manager1@db1 auxiliary=sys/manager1@db2
Recovery Manager: Release 12.1.0.2.0 - Production on Sun May 29 07:43:57 2016
Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.
connected to target database: DB1 (DBID=1506943872)
connected to auxiliary database: DB2 (not mounted)
RMAN> DUPLICATE TARGET DATABASE TO 'DB2'
FROM ACTIVE DATABASE
USING BACKUPSET;
Starting Duplicate Db at 29-MAY-16
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=22 device type=DISK
current log archived
contents of Memory Script:
{
sql clone "create spfile from memory";
}
executing Memory Script
sql statement: create spfile from memory
contents of Memory Script:
{
shutdown clone immediate;
startup clone nomount;
}
executing Memory Script
Oracle instance shut down
connected to auxiliary database (not started)
Oracle instance started
Total System Global Area 767557632 bytes
Fixed Size 2929112 bytes
Variable Size 310382120 bytes
Database Buffers 448790528 bytes
Redo Buffers 5455872 bytes
contents of Memory Script:
{
sql clone "alter system set control_files =
''/data/db2/DB2/controlfile/o1_mf_cnnz809t_.ctl'', ''/data/db2/DB2/controlfile/o1_mf_cnnz80by_.ctl'' comment=
''Set by RMAN'' scope=spfile";
sql clone "alter system set db_name =
''DB1'' comment=
''Modified by RMAN duplicate'' scope=spfile";
sql clone "alter system set db_unique_name =
''DB2'' comment=
''Modified by RMAN duplicate'' scope=spfile";
shutdown clone immediate;
startup clone force nomount
restore clone from service 'db1' primary controlfile;
alter clone database mount;
}
executing Memory Script
sql statement: alter system set control_files = ''/data/db2/DB2/controlfile/o1_mf_cnnz809t_.ctl'', ''/data/db2/DB2/controlfile/o1_mf_cnnz80by_.ctl'' comment= ''Set by RMAN'' scope=spfile
sql statement: alter system set db_name = ''DB1'' comment= ''Modified by RMAN duplicate'' scope=spfile
sql statement: alter system set db_unique_name = ''DB2'' comment= ''Modified by RMAN duplicate'' scope=spfile
Oracle instance shut down
Oracle instance started
Total System Global Area 767557632 bytes
Fixed Size 2929112 bytes
Variable Size 310382120 bytes
Database Buffers 448790528 bytes
Redo Buffers 5455872 bytes
Starting restore at 29-MAY-16
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=21 device type=DISK
channel ORA_AUX_DISK_1: starting datafilebackup setrestore
channel ORA_AUX_DISK_1: using network backup setfrom service db1
channel ORA_AUX_DISK_1: restoring control file
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/data/db2/DB2/controlfile/o1_mf_cnnz809t_.ctl
output file name=/data/db2/DB2/controlfile/o1_mf_cnnz80by_.ctl
Finished restore at 29-MAY-16
database mounted
contents of Memory Script:
{
set newname for datafile 1 to
"/data/db2/DB1/datafile/o1_mf_system_cnnz5sx2_.dbf";
set newname for datafile 3 to
"/data/db2/DB1/datafile/o1_mf_sysaux_cnnz42rx_.dbf";
set newname for datafile 4 to
"/data/db2/DB1/datafile/o1_mf_undotbs1_cnnz784o_.dbf";
set newname for datafile 5 to
"/data/db2/DB1/datafile/o1_mf_users_cnony92f_.dbf";
set newname for datafile 6 to
"/data/db2/DB1/datafile/o1_mf_users_cnnz774t_.dbf";
restore
from service 'db1' clone database
;
sql 'alter system archive log current';
}
executing Memory Script
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting restore at 29-MAY-16
using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service db1
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00001 to /data/db2/DB1/datafile/o1_mf_system_cnnz5sx2_.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:15
channel ORA_AUX_DISK_1: starting datafilebackup set restore
channel ORA_AUX_DISK_1: using network backup setfrom service db1
channel ORA_AUX_DISK_1: specifying datafile(s) to restorefrom backup set
channel ORA_AUX_DISK_1: restoring datafile 00003 to /data/db2/DB1/datafile/o1_mf_sysaux_cnnz42rx_.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:15
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup setfrom service db1
channel ORA_AUX_DISK_1: specifying datafile(s) to restorefrom backup set
channel ORA_AUX_DISK_1: restoring datafile 00004 to /data/db2/DB1/datafile/o1_mf_undotbs1_cnnz784o_.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:03
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service db1
channel ORA_AUX_DISK_1: specifying datafile(s) to restorefrom backup set
channel ORA_AUX_DISK_1: restoring datafile 00005 to /data/db2/DB1/datafile/o1_mf_users_cnony92f_.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:15
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup setfrom service db1
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00006 to /data/db2/DB1/datafile/o1_mf_users_cnnz774t_.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 29-MAY-16
sql statement: alter system archive log current
current log archived
contents of Memory Script:
{
restore clone force from service 'db1'
archivelog from scn 1657545;
switch clone datafile all;
}
executing Memory Script
Starting restore at 29-MAY-16
using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: starting archived log restore to default destination
channel ORA_AUX_DISK_1: using network backup set from service db1
channel ORA_AUX_DISK_1: restoring archived log
archived log thread=1 sequence=17
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
channel ORA_AUX_DISK_1: starting archived log restore to default destination
channel ORA_AUX_DISK_1: using network backup setfrom service db1
channel ORA_AUX_DISK_1: restoring archived log
archived log thread=1 sequence=18
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 29-MAY-16
datafile 1 switched to datafile copy
input datafile copy RECID=6 STAMP=913103165 file name=/data/db2/DB1/datafile/o1_mf_system_cnnz5sx2_.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=7 STAMP=913103165 file name=/data/db2/DB1/datafile/o1_mf_sysaux_cnnz42rx_.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=8 STAMP=913103165 file name=/data/db2/DB1/datafile/o1_mf_undotbs1_cnnz784o_.dbf
datafile 5 switched to datafile copy
input datafile copy RECID=9 STAMP=913103165 file name=/data/db2/DB1/datafile/o1_mf_users_cnony92f_.dbf
datafile 6 switched to datafile copy
input datafile copy RECID=10 STAMP=913103165 file name=/data/db2/DB1/datafile/o1_mf_users_cnnz774t_.dbf
contents of Memory Script:
{
set until scn 1657807;
recover
clone database
delete archivelog
;
}
executing Memory Script
executing command: SET until clause
Starting recover at 29-MAY-16
using channel ORA_AUX_DISK_1
starting media recovery
archived log for thread 1 with sequence 17 is already on disk as file /data/db2/DB2/archivelog/2016_05_29/o1_mf_1_17_cnoomv9m_.arc
archived log for thread 1 with sequence 18 is already on disk as file /data/db2/DB2/archivelog/2016_05_29/o1_mf_1_18_cnoomwkm_.arc
archived log file name=/data/db2/DB2/archivelog/2016_05_29/o1_mf_1_17_cnoomv9m_.arc thread=1 sequence=17
archived log file name=/data/db2/DB2/archivelog/2016_05_29/o1_mf_1_18_cnoomwkm_.arc thread=1 sequence=18
media recovery complete, elapsed time: 00:00:00
Finished recover at 29-MAY-16
Oracle instance started
Total System Global Area 767557632 bytes
Fixed Size 2929112 bytes
Variable Size 310382120 bytes
Database Buffers 448790528 bytes
Redo Buffers 5455872 bytes
contents of Memory Script:
{
sql clone "alter system set db_name =
''DB2'' comment=
''Reset to original value by RMAN'' scope=spfile";
sql clone "alter system reset db_unique_name scope=spfile";
}
executing Memory Script
sql statement: alter system set db_name = ''DB2'' comment= ''Reset to original value by RMAN'' scope=spfile
sql statement: alter system reset db_unique_name scope=spfile
Oracle instance started
Total System Global Area 767557632 bytes
Fixed Size 2929112 bytes
Variable Size 310382120 bytes
Database Buffers 448790528 bytes
Redo Buffers 5455872 bytes
sql statement: CREATE CONTROLFILE REUSE SET DATABASE "DB2" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 SIZE 50 M ,
GROUP 2 SIZE 50 M ,
GROUP 3 SIZE 50 M
DATAFILE
'/data/db2/DB1/datafile/o1_mf_system_cnnz5sx2_.dbf'
CHARACTER SET WE8MSWIN1252
contents of Memory Script:
{
set newname for tempfile 1 to
"/data/db2/DB1/datafile/o1_mf_temp_cnnz83hz_.tmp";
switch clone tempfile all;
catalog clone datafilecopy "/data/db2/DB1/datafile/o1_mf_sysaux_cnnz42rx_.dbf",
"/data/db2/DB1/datafile/o1_mf_undotbs1_cnnz784o_.dbf",
"/data/db2/DB1/datafile/o1_mf_users_cnony92f_.dbf",
"/data/db2/DB1/datafile/o1_mf_users_cnnz774t_.dbf";
switch clone datafile all;
}
executing Memory Script
executing command: SET NEWNAME
renamed tempfile 1 to /data/db2/DB1/datafile/o1_mf_temp_cnnz83hz_.tmp in control file
cataloged datafile copy
datafile copy file name=/data/db2/DB1/datafile/o1_mf_sysaux_cnnz42rx_.dbf RECID=1 STAMP=913103190
cataloged datafile copy
datafile copy file name=/data/db2/DB1/datafile/o1_mf_undotbs1_cnnz784o_.dbf RECID=2 STAMP=913103190
cataloged datafile copy
datafile copy file name=/data/db2/DB1/datafile/o1_mf_users_cnony92f_.dbf RECID=3 STAMP=913103190
cataloged datafile copy
datafile copy file name=/data/db2/DB1/datafile/o1_mf_users_cnnz774t_.dbf RECID=4 STAMP=913103190
datafile 3 switched to datafile copy
input datafile copy RECID=1 STAMP=913103190 file name=/data/db2/DB1/datafile/o1_mf_sysaux_cnnz42rx_.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=2 STAMP=913103190 file name=/data/db2/DB1/datafile/o1_mf_undotbs1_cnnz784o_.dbf
datafile 5 switched to datafile copy
input datafile copy RECID=3 STAMP=913103190 file name=/data/db2/DB1/datafile/o1_mf_users_cnony92f_.dbf
datafile 6 switched to datafile copy
input datafile copy RECID=4 STAMP=913103190 file name=/data/db2/DB1/datafile/o1_mf_users_cnnz774t_.dbf
contents of Memory Script:
{
Alter clone database open resetlogs;
}
executing Memory Script
database opened
Cannot remove created server parameter file
Finished Duplicate Db at 29-MAY-16
RMAN>
Follow me: