RMAN duplicate using active RMAN technology

This blog demonstrates the use of an RMAN duplicate using “active” RMAN technology.  Active duplication is available with Oracle’s Enterprise Database product starting with 11gR2 forward 11.2.x.x.x, 12c etc.
Basically “active duplicate” uses the control file and the currently open database as a source to clone / duplicate from – no backup is required.  It is required that the open DB being cloned from be in archivelog mode and there are restrictions on what version of the DBs you can use for a source and target together, to be sure… use the same Oracle version.  There are other restrictions on cross platform use – an Endian change (byte order change) won’t work – e.g. AIX to Linux…  see Oracle’s doc if you are cloning to a different OS.  If the source and target are the same platform, you are good for certain.
One important thing to note in RMAN nomenclature / syntax AUXILIARY is the target, and target is the source when doing an RMAN DB duplicate.   So in this blog, when I say source and target, in RMAN speak, that is target and auxiliary – respectively.  If you have not done a bunch of conventional RMAN duplicates, this is likely somewhat confusing.  Re-read the paragraph, or see the RMAN connect syntax below, or better yet both.
Non-active duplicates use an existing full RMAN backup and archivelogs, where the target is a backup known to a local control file – this is not being shown here.
Note the directory structures between the two environments with the exception of a change SID/DB_NAME used in those directory structures.
In the case below “GOLD” is the source, and “GGTARGET” is the target or in the case of RMAN duplicate referred to as the Auxiliary
add entries to both servers $ORACLE_HOME/network/admin/tnsnames.ora

GGTARGET =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = o68-122db.localdomain)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = GGTARGET.localdomain)
)
)
GOLD =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oel66-noDB.localdomain)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = gold.localdomain)
)
)

create on the new db side an $ORACLE_HOME/network/admin/Listener.ora

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = GGTARGET)
(ORACLE_HOME = /u01/app/oracle/product/12.2.0/dbhome_1)
(SID_NAME = GGTARGET)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = o68-122db)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)

The easy way is to match the source and target dir structure as closely as possible and then use “convert” parameters in the RMAN duplicate command shown later

mkdir -p /u01/app/oracle/oradata/GGTARGET
mkdir -p /u01/app/oracle/fast_recovery_area/GGTARGET
mkdir -p /u01/app/oracle/fast_recovery_area/GGTARGET/archivelog
mkdir -p /u01/app/oracle/fast_recovery_area/GGTARGET/backupset
mkdir -p /u01/app/oracle/fast_recovery_area/GGTARGET/autobackup
mkdir -p /u01/app/oracle/admin/GGTARGET/adump

Either copy the source $ORACLE_HOME/dbs/orapwSID.ora to the target and rename or create a new one on the target with the same password as the source.
Creating the password file on the primary will go something like this:
orapwd file=/u01/app/oracle/product/12.2.0/dbhome_1/dbs/orapwGGTARGET password=JuNotReal11# force=Y entries=10 format=12
# note: if you do not specify “format=12” and your db version is 12.2 – 12.2 will enforce password complexity by default – if you are pre-12c leave off the format= option.
Create on the target/auxiliary $ORACLE_HOME/dbs/initSID.ora with only the DB_NAME, SGA_MAX_SIZE, and SGA_TARGET
Where you want the db created:

lsnrctl start
sqlplus / as sysdba
startup nomount pfile=/u01/app/oracle/product/12.2.0/dbhome_1/dbs/initGGTARGET.ora

# if you are on the clone to host:

rman TARGET sys/J..@gold AUXILIARY /

# or you can… if you are on the clone from:

rman TARGET sys/J.. AUXILIARY sys/J..@GGTARGET

Then from your RMAN session just connected

DUPLICATE DATABASE TO GGTARGET
FROM ACTIVE DATABASE
SPFILE set
db_name=’GGTARGET’
parameter_value_convert (‘gold’,’GGTARGET’)
set db_file_name_convert=’/u01/app/oracle/oradata/gold/’,’/u01/app/oracle/oradata/GGTARGET/’
set log_file_name_convert=’/u01/app/oracle/oradata/gold/’,’/u01/app/oracle/oradata/GGTARGET/’
set control_files=’/u01/app/oracle/oradata/GGTARGET/control01.ctl’,’/u01/app/oracle/oradata/GGTARGET/control02.ctl’,’/u01/app/oracle/oradata/GGTARGET/control03.ctl’
NOFILENAMECHECK;

vi initGGTARGET.ora
audit_file_dest=/u01/app/oracle/admin/GGTARGET/adump
 

Scroll to Top