We have seen preparing Primary Database for Dataguard and creating Oracle network service on both sides.
In this article we will see RMAN duplicate target database for standby using active database command to prepare auxiliary database.
Note: For this process, we need to copy password file from primary side to standby side under $ORACLE_HOME/dbs
Database Detail :
Step 1 : Connect to RMAN using netservice we have created at primary side :
[oracle@localhost ~]$ rman target sys/oracle@mgr auxiliary sys/oracle@std_mgr Recovery Manager: Release 11.2.0.4.0 - Production on Tue Apr 17 17:43:32 2018 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: MGR (DBID=1905869882) connected to auxiliary database: MGR (not mounted) RMAN>
Step 2 : Prepare a script to perform RMAN duplicate command :
run { allocate channel c1 type disk; allocate channel c2 type disk; allocate channel c3 type disk; allocate channel c4 type disk; allocate auxiliary channel aux type disk; duplicate target database for standby from active database nofilenamecheck spfile set log_archive_max_processes='8' set db_unique_name='std_mgr' set standby_file_management='AUTO' set log_archive_config='dg_config=(mgr,std_mgr)' set log_archive_dest_1='LOCATION=/u01/arc/mgr VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES)' set log_archive_dest_4='LOCATION=/u01/arc/mgr/stdby/ VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLES) DB_UNIQUE_NAME=std_mgr' set DG_BROKER_START='TRUE' set fal_client='std_mgr' set fal_server='mgr' set log_Archive_dest_2='service=mgr lgwr sync affirm valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=mgr'; }
We can see in above script, we have set all parameters which will be needed for Physical Standby database.
Step 3 : run above script to create standby database .
RMAN> run 2> { allocate channel c1 type disk; allocate channel c2 type disk; allocate channel c3 type disk; allocate channel c4 type disk; allocate auxiliary channel aux type disk; duplicate target database for standby from active database nofilenamecheck spfile set log_archive_max_processes='8' set db_unique_name='std_mgr' set standby_file_management='AUTO' set log_archive_config='dg_config=(mgr,std_mgr)' set log_archive_dest_1='LOCATION=/u01/arc/mgr VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES)' set log_archive_dest_4='LOCATION=/u01/arc/mgr/stdby/ VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLES) DB_UNIQUE_NAME=std_mgr' set DG_BROKER_START='TRUE' set fal_client='std_mgr' set fal_server='mgr' set log_Archive_dest_2='service=mgr lgwr sync affirm valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=mgr'; }3> 4> 5> 6> 7> 8> 9> 10> 11> 12> 13> 14> 15> 16> 17> 18> 19> using target database control file instead of recovery catalog allocated channel: c1 channel c1: SID=103 device type=DISK allocated channel: c2 channel c2: SID=89 device type=DISK allocated channel: c3 channel c3: SID=95 device type=DISK allocated channel: c4 channel c4: SID=97 device type=DISK allocated channel: aux channel aux: SID=20 device type=DISK Starting Duplicate Db at 17-APR-18 contents of Memory Script: { backup as copy reuse targetfile '/u01/oracle/product/11.2.0/db_1/dbs/orapwmgr' auxiliary format '/u01/oracle/product/11.2.0/db_1/dbs/orapwmgr' targetfile '/u01/oracle/product/11.2.0/db_1/dbs/spfilemgr.ora' auxiliary format '/u01/oracle/product/11.2.0/db_1/dbs/spfilemgr.ora' ; sql clone "alter system set spfile= ''/u01/oracle/product/11.2.0/db_1/dbs/spfilemgr.ora''"; } executing Memory Script Starting backup at 17-APR-18 Finished backup at 17-APR-18 sql statement: alter system set spfile= ''/u01/oracle/product/11.2.0/db_1/dbs/spfilemgr.ora'' contents of Memory Script: { sql clone "alter system set log_archive_max_processes = 8 comment= '''' scope=spfile"; sql clone "alter system set db_unique_name = ''std_mgr'' comment= '''' scope=spfile"; sql clone "alter system set standby_file_management = ''AUTO'' comment= '''' scope=spfile"; sql clone "alter system set log_archive_config = ''dg_config=(mgr,std_mgr)'' comment= '''' scope=spfile"; sql clone "alter system set log_archive_dest_1 = ''LOCATION=/u01/arc/mgr VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES)'' comment= '''' scope=spfile"; sql clone "alter system set log_archive_dest_4 = ''LOCATION=/u01/arc/mgr/stdby/ VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLES) DB_UNIQUE_NAME=std_mgr'' comment= '''' scope=spfile"; sql clone "alter system set DG_BROKER_START = TRUE comment= '''' scope=spfile"; sql clone "alter system set fal_client = ''std_mgr'' comment= '''' scope=spfile"; sql clone "alter system set fal_server = ''mgr'' comment= '''' scope=spfile"; sql clone "alter system set log_Archive_dest_2 = ''service=mgr lgwr sync affirm valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=mgr'' comment= '''' scope=spfile"; shutdown clone immediate; startup clone nomount; } executing Memory Script sql statement: alter system set log_archive_max_processes = 8 comment= '''' scope=spfile sql statement: alter system set db_unique_name = ''std_mgr'' comment= '''' scope=spfile sql statement: alter system set standby_file_management = ''AUTO'' comment= '''' scope=spfile sql statement: alter system set log_archive_config = ''dg_config=(mgr,std_mgr)'' comment= '''' scope=spfile sql statement: alter system set log_archive_dest_1 = ''LOCATION=/u01/arc/mgr VALID_FOR=(ONLINE_LOGFILES, ALL_ROLES)'' comment= '''' scope=spfile sql statement: alter system set log_archive_dest_4 = ''LOCATION=/u01/arc/mgr/stdby/ VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLES) DB_UNIQUE_NAME=std_mgr'' comment= '''' scope=spfile sql statement: alter system set DG_BROKER_START = TRUE comment= '''' scope=spfile sql statement: alter system set fal_client = ''std_mgr'' comment= '''' scope=spfile sql statement: alter system set fal_server = ''mgr'' comment= '''' scope=spfile sql statement: alter system set log_Archive_dest_2 = ''service=mgr lgwr sync affirm valid_for= (ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=mgr'' comment= '''' scope=spfile Oracle instance shut down connected to auxiliary database (not started) Oracle instance started Total System Global Area 392495104 bytes Fixed Size 2253584 bytes Variable Size 176164080 bytes Database Buffers 209715200 bytes Redo Buffers 4362240 bytes allocated channel: aux channel aux: SID=19 device type=DISK contents of Memory Script: { backup as copy current controlfile for standby auxiliary format '/u01/oracle/oradata/mgr/control01.ctl'; restore clone controlfile to '/u01/oracle/oradata/mgr/control02.ctl' from '/u01/oracle/oradata/mgr/control01.ctl'; } executing Memory Script Starting backup at 17-APR-18 channel c1: starting datafile copy copying standby control file output file name=/u01/oracle/product/11.2.0/db_1/dbs/snapcf_mgr.f tag=TAG20180417T174406 RECID=2 STAMP=973705448 channel c1: datafile copy complete, elapsed time: 00:00:04 Finished backup at 17-APR-18 Starting restore at 17-APR-18 channel aux: copied control file copy Finished restore at 17-APR-18 contents of Memory Script: { sql clone 'alter database mount standby database'; } executing Memory Script sql statement: alter database mount standby database RMAN-05538: WARNING: implicitly using DB_FILE_NAME_CONVERT contents of Memory Script: { set newname for tempfile 1 to "/u01/oracle/oradata/mgr/temp01.dbf"; switch clone tempfile all; set newname for datafile 1 to "/u01/oracle/oradata/mgr/system01.dbf"; set newname for datafile 2 to "/u01/oracle/oradata/mgr/sysaux01.dbf"; set newname for datafile 3 to "/u01/oracle/oradata/mgr/undotbs01.dbf"; set newname for datafile 4 to "/u01/oracle/oradata/mgr/users01.dbf"; backup as copy reuse datafile 1 auxiliary format "/u01/oracle/oradata/mgr/system01.dbf" datafile 2 auxiliary format "/u01/oracle/oradata/mgr/sysaux01.dbf" datafile 3 auxiliary format "/u01/oracle/oradata/mgr/undotbs01.dbf" datafile 4 auxiliary format "/u01/oracle/oradata/mgr/users01.dbf" ; sql 'alter system archive log current'; } executing Memory Script executing command: SET NEWNAME renamed tempfile 1 to /u01/oracle/oradata/mgr/temp01.dbf in control file executing command: SET NEWNAME executing command: SET NEWNAME executing command: SET NEWNAME executing command: SET NEWNAME Starting backup at 17-APR-18 channel c1: starting datafile copy input datafile file number=00001 name=/u01/oracle/oradata/mgr/system01.dbf channel c2: starting datafile copy input datafile file number=00002 name=/u01/oracle/oradata/mgr/sysaux01.dbf channel c3: starting datafile copy input datafile file number=00003 name=/u01/oracle/oradata/mgr/undotbs01.dbf channel c4: starting datafile copy input datafile file number=00004 name=/u01/oracle/oradata/mgr/users01.dbf output file name=/u01/oracle/oradata/mgr/users01.dbf tag=TAG20180417T174420 channel c4: datafile copy complete, elapsed time: 00:00:03 output file name=/u01/oracle/oradata/mgr/undotbs01.dbf tag=TAG20180417T174420 channel c3: datafile copy complete, elapsed time: 00:00:07 output file name=/u01/oracle/oradata/mgr/sysaux01.dbf tag=TAG20180417T174420 channel c2: datafile copy complete, elapsed time: 00:01:15 output file name=/u01/oracle/oradata/mgr/system01.dbf tag=TAG20180417T174420 channel c1: datafile copy complete, elapsed time: 00:01:35 Finished backup at 17-APR-18 sql statement: alter system archive log current contents of Memory Script: { switch clone datafile all; } executing Memory Script datafile 1 switched to datafile copy input datafile copy RECID=2 STAMP=973705557 file name=/u01/oracle/oradata/mgr/system01.dbf datafile 2 switched to datafile copy input datafile copy RECID=3 STAMP=973705557 file name=/u01/oracle/oradata/mgr/sysaux01.dbf datafile 3 switched to datafile copy input datafile copy RECID=4 STAMP=973705557 file name=/u01/oracle/oradata/mgr/undotbs01.dbf datafile 4 switched to datafile copy input datafile copy RECID=5 STAMP=973705557 file name=/u01/oracle/oradata/mgr/users01.dbf Finished Duplicate Db at 17-APR-18 released channel: c1 released channel: c2 released channel: c3 released channel: c4 released channel: aux RMAN>
Now check physical standby database :
Step 4 : Check database role in Primary :
SQL> select name,open_mode,database_role from v$database; NAME OPEN_MODE DATABASE_ROLE --------- -------------------- ---------------- MGR READ WRITE PRIMARY SQL>
Step 5 : Check database role at standby :
SQL> select name,open_mode,database_role from v$database; NAME OPEN_MODE DATABASE_ROLE --------- -------------------- ---------------- MGR MOUNTED PHYSICAL STANDBY SQL>
Step 6 : Check max archive log sequence at primary :
SQL> select max(sequence#) from v$thread; MAX(SEQUENCE#) -------------- 35 SQL>
Step 7 : Check max archive log sequence at standby :
SQL> select max(sequence#) from v$thread; MAX(SEQUENCE#) -------------- 35 SQL>
Step 8 : Switch archive log at Primary database :
SQL> alter system switch logfile; System altered.
Step 9 : Again check max archive log sequence at Standby database:
SQL> select max(sequence#) from v$thread; MAX(SEQUENCE#) -------------- 36 SQL>
We can see here archive log is transferred to standby database.
In next article, we will create standby with RMAN Restore
Stay tuned for More articles on Oracle DataGuard
Thank you for giving your valuable time to read the above information.
If you want to be updated with all our articles send us the Invitation or Follow us:
Telegram Channel: https://t.me/helporacle
Skant Gupta’s LinkedIn: www.linkedin.com/in/skantali/
Joel Perez’s LinkedIn: Joel Perez’s Profile
LinkedIn Group: Oracle Cloud DBAAS
Facebook Page: OracleHelp