Prior to Oracle Database 11g duplication was performed from an existing RMAN backup. Oracle Database 11g introduces Active database duplication which copies the live source database over the network without the need of an existing backup. As was the case in the backup based duplication, active duplication can be used to create a standby database.
This document will document the steps to use the RMAN command DUPLICATE FROM ACTIVE DATABASE to create a physical standby. Both the primary and standby servers have Oracle Enterprise Linux 5.4 64 bit with Oracle Enterprise Database 11g R2 base installed.
Primary database information
Host: ocm1.odlabs.net
DB_NAME = pritst
DB_UNIQUE_NAME=pritst
Standby database information
Host: ocm2.odlabs.net
DB_NAME = pritst
DB_UNIQUE_NAME = stbytst
Primary Preparations
Ensure primary database is in archive log mode
SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination /u01/app/oracle/oradata/pritst/arch Oldest online log sequence 2 Next log sequence to archive 4 Current log sequence 4 SQL>
If your output does not have Archive Mode for the Database log mode then you will need to configure your database for archive log mode. See the post Enable/Disable Archive Log Mode 10g/11g
Verify that forced logging is enabled and enable it if it not.
SQL> select force_logging from v$database; FOR --- NO SQL> alter database force logging; Database altered. SQL>
Standby redo logs should be created in addition to the redo logs. The standby redo logs need to be as large as the largest redo log and there should be one extra group. On this system there are three log groups and the redo logs are 50MB in size so four standby redo logs will be added each at 50MB.
SQL> select group#, thread#, bytes/1024/1024 2 from v$log; GROUP# THREAD# BYTES/1024/1024 ---------- ---------- --------------- 1 1 50 2 1 50 3 1 50 SQL> alter database add standby logfile '/u01/app/oracle/oradata/pritst/stby_redo01.log' size 50M; Database altered. SQL> alter database add standby logfile '/u01/app/oracle/oradata/pritst/stby_redo02.log' size 50M; Database altered. SQL> alter database add standby logfile '/u01/app/oracle/oradata/pritst/stby_redo03.log' size 50M; Database altered. SQL> alter database add standby logfile '/u01/app/oracle/oradata/pritst/stby_redo04.log' size 50M; Database altered. SQL>
Initialization Parameters needed for Dataguard
This section will detail the initialization parameters used in a dataguard configuration. The primary database will be configured in this section while the standby parameters will be set at the time of duplication.
The DB_NAME parameter will be pritst for the both the primary database and the standby database. The DB_UNIQUE_NAME will be pritst for the primary database and stbytst for the standby.
SQL> show parameter db_name NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_name string pritst SQL> show parameter db_unique_name NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_unique_name string pritst SQL>
The DB_UNIQUE_NAME will be used in the LOG_ARCHIVE_CONFIG parameter to enable the sending and receiving of redo logs to remote destinations.
SQL> show parameter LOG_ARCHIVE_CONFIG NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_config string SQL> alter system set log_archive_config='DG_CONFIG=(pritst,stbytst)'; System altered. SQL>
Set value for LOG_ARCHIVE_DEST_1 and LOG_ARCHIVE_DEST_2
SQL> show parameter log_archive_dest_1 NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_dest_1 string LOCATION=/u01/app/oracle/orada ta/pritst/arch log_archive_dest_10 string log_archive_dest_11 string log_archive_dest_12 string log_archive_dest_13 string log_archive_dest_14 string log_archive_dest_15 string log_archive_dest_16 string log_archive_dest_17 string log_archive_dest_18 string NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_dest_19 string SQL> alter system set log_archive_dest_1='LOCATION=/u01/app/oracle/oradata/pritst/arch/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=pritst'; System altered. SQL>
The redo transport mode is set in the parameter LOG_ARCHIVE_DEST_2. Below we configure redo transport mode for Maximum performance by setting ASYNC NOAFFIRM. Instead of a location a service name is provided to send the archive logs.
SQL> show parameter log_archive_dest_2 NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_dest_2 string log_archive_dest_20 string log_archive_dest_21 string log_archive_dest_22 string log_archive_dest_23 string log_archive_dest_24 string log_archive_dest_25 string log_archive_dest_26 string log_archive_dest_27 string log_archive_dest_28 string log_archive_dest_29 string SQL> alter system set log_archive_dest_2='SERVICE=stbytst LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=stbytst'; System altered. SQL>
The FAL_SERVER specifies the fetch archive log (FAL) server for the standby database. The FAL_CLIENT specifies the FAL client name. Both are used by the FAL service. The FAL_SERVER is the primary and FAL_CLIENT is the standby.
SQL> alter system set fal_server=pritst; System altered. SQL> alter system set fal_client=stbytst; System altered. SQL>
Operating system file additions and deletions can be replicated to the physical standby database setting STANDBY_FILE_MANAGEMENT to auto.
SQL> alter system set standby_file_management=auto; System altered. SQL>
Remote Login
SQL> alter system set remote_loging_passwordfile=exclusive; System altered. SQL>
Network Connectivity
The primary database should be statically registered with its listener.
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = pritst) (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1) ) )
Add TNS Names Entries for both pritst and stbytst databases on both servers
[oracle@ocm2 dbs]$ cat /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora PRITST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ocm1.odlabs.net)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pritst) ) ) STBYTST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ocm2.odlabs.net)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pritst) ) ) [oracle@ocm2 dbs]$
Create Standby Shell
The work on the primary server is complete now the standby server needs to be configured. First start off by creating the directories on the files system to hold the data and archive log files along with the admin directories to support auditing.
[oracle@ocm2 ~]$ mkdir oradata [oracle@ocm2 ~]$ mkdir oradata/pritst [oracle@ocm2 ~]$ mkdir oradata/pritst/arch [oracle@ocm2 ~]$ mkdir /u01/app/oracle/admin [oracle@ocm2 ~]$ mkdir /u01/app/oracle/admin/pritst [oracle@ocm2 ~]$ mkdir /u01/app/oracle/admin/pritst/adump [oracle@ocm2 ~]$ mkdir /u01/app/oracle/admin/pritst/bdump [oracle@ocm2 ~]$ mkdir /u01/app/oracle/admin/pritst/dpdump [oracle@ocm2 ~]$ mkdir /u01/app/oracle/admin/pritst/pfile
Add the following line to /etc/oratab on the standby server.
pritst:/u01/app/oracle/product/11.2.0/dbhome_1:N
Create the listener and statically register the standby database.
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = pritst) (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ocm2.odlabs.net)(PORT = 1521)) ) ) ADR_BASE_LISTENER = /u01/app/oracle [oracle@ocm2 ~]$ lsnrctl start LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 09-JUL-2012 14:02:44 Copyright (c) 1991, 2009, Oracle. All rights reserved. Starting /u01/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr: please wait... TNSLSNR for Linux: Version 11.2.0.1.0 - Production System parameter file is /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora Log messages written to /u01/app/oracle/diag/tnslsnr/ocm2/listener/alert/log.xml Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ocm2.odlabs.net)(PORT=1521))) Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ocm2.odlabs.net)(PORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production Start Date 09-JUL-2012 14:02:44 Uptime 0 days 0 hr. 0 min. 10 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora Listener Log File /u01/app/oracle/diag/tnslsnr/ocm2/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ocm2.odlabs.net)(PORT=1521))) Services Summary... Service "pritst" has 1 instance(s). Instance "pritst", status UNKNOWN, has 1 handler(s) for this service... The command completed successfully [oracle@ocm2 ~]$
Also insure that the TNS entries for both the primary and standby are in the ORACLE_HOME/network/admin/tnsnames.ora file.
PRITST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ocm1.odlabs.net)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pritst) ) ) STBYTST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ocm2.odlabs.net)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pritst) ) )
Create a basic PFILE in ORACLE_HOME/dbs with the following parameters.
[oracle@ocm2 dbs]$ cat initpritst.ora DB_NAME=pritst DB_UNIQUE_NAME=stbytst [oracle@ocm2 dbs]$
The rest of the parameters will be set in the duplicate command and carried over from the primary.
Copy the password file from the primary server to the standby server
[oracle@ocm2 ~]$ scp oracle@ocm1:$ORACLE_HOME/dbs/orapwpritst $ORACLE_HOME/dbs
With the network configuration made and the PFILE and password file in place the standby instance can now be started in nomount.
[oracle@ocm2 ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.1.0 Production on Wed Sep 28 10:40:29 2011 Copyright (c) 1982, 2009, Oracle. All rights reserved. Connected to an idle instance. SQL> startup nomount ORACLE instance started. Total System Global Area 146472960 bytes Fixed Size 1335080 bytes Variable Size 92274904 bytes Database Buffers 50331648 bytes Redo Buffers 2531328 bytes SQL> exit [oracle@ocm2 ~]$
Make sure you exit after starting the database in nomount. The duplicate procedure will restart the database and an open connection can cause the process to fail.
Duplicate for standby
Below is the RMAN run command to perform the database duplication from and active database along with brief explanations for the options used in the duplicate.
FOR STANDBY – the duplicate is for use as a standby so a DBID change will not be forced.
FROM ACTIVE DATABASE – instructs RMAN to use the active target database instead of disk based backups.
DORECOVER – do recovery bringing the standby database up to the current point in time.
SPFILE – values for parameters specific to the auxiliary instance can be set here.
NOFILENAMECHECK – this option is added because the duplicate database files uses the same name as the source database.
[oracle@ocm2 ~]$ cat dupstby.cmd run { allocate channel pri1 type disk; allocate channel pri2 type disk; allocate channel prmy4 type disk; allocate auxiliary channel stby type disk; duplicate target database for standby from active database dorecover spfile set db_unique_name='stbytst' set control_files='/u01/app/oracle/oradata/pritst/control01.ctl','/u01/app/oracle/oradata/pritst/control02.ct' set fal_client='pritst' set fal_server='stbytst' set standby_file_management='AUTO' set log_archive_config='dg_config=(pritst,stbytst)' set log_archive_dest_1='LOCATION=/u01/app/oracle/oradata/pritst/arch/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=stbytst' set log_archive_dest_2='service=pritst ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=pritst' nofilenamecheck; } [oracle@ocm2 ~]$
On standby connect to both the target (pritst) and the auxiliary (stbytst) in RMAN.
[oracle@ocm2 ~]$ rman Recovery Manager: Release 11.2.0.1.0 - Production on Fri Jul 13 16:47:46 2012 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. RMAN> connect target sys/password@pritst connected to target database: PRITST (DBID=3720300117) RMAN> connect auxiliary sys/password@stbytst connected to auxiliary database: PRITST (not mounted) RMAN> @dupstby.cmd RMAN> run { 2> allocate channel pri1 type disk; 3> allocate channel pri2 type disk; 4> allocate channel prmy4 type disk; 5> allocate auxiliary channel stby type disk; 6> 7> duplicate target database 8> for standby 9> from active database 10> dorecover 11> spfile 12> set db_unique_name='stbytst' 13> set control_files='/u01/app/oracle/oradata/pritst/control01.ctl','/u01/app/oracle/oradata/pritst/control02.ct' 14> set fal_client='pritst' 15> set fal_server='stbytst' 16> set standby_file_management='AUTO' 17> set log_archive_config='dg_config=(pritst,stbytst)' 18> set log_archive_dest_1='LOCATION=/u01/app/oracle/oradata/pritst/arch/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=stbytst' 19> set log_archive_dest_2='service=pritst ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=pritst' 20> nofilenamecheck; 21> } using target database control file instead of recovery catalog allocated channel: pri1 channel pri1: SID=42 device type=DISK allocated channel: pri2 channel pri2: SID=36 device type=DISK allocated channel: prmy4 channel prmy4: SID=45 device type=DISK allocated channel: stby channel stby: SID=20 device type=DISK Starting Duplicate Db at 13-JUL-12 contents of Memory Script: { backup as copy reuse targetfile '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwpritst' auxiliary format '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwpritst' targetfile '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfilepritst.ora' auxiliary format '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfilepritst.ora' ; sql clone "alter system set spfile= ''/u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfilepritst.ora''"; } executing Memory Script Starting backup at 13-JUL-12 Finished backup at 13-JUL-12 sql statement: alter system set spfile= ''/u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfilepritst.ora'' contents of Memory Script: { sql clone "alter system set db_unique_name = ''stbytst'' comment= '''' scope=spfile"; sql clone "alter system set control_files = ''/u01/app/oracle/oradata/pritst/control01.ctl'', ''/u01/app/oracle/oradata/pritst/control02.ct'' comment= '''' scope=spfile"; sql clone "alter system set fal_client = ''pritst'' comment= '''' scope=spfile"; sql clone "alter system set fal_server = ''stbytst'' 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=(pritst,stbytst)'' comment= '''' scope=spfile"; sql clone "alter system set log_archive_dest_1 = ''LOCATION=/u01/app/oracle/oradata/pritst/arch/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=stbytst'' comment= '''' scope=spfile"; sql clone "alter system set log_archive_dest_2 = ''service=pritst ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=pritst'' comment= '''' scope=spfile"; shutdown clone immediate; startup clone nomount; } executing Memory Script sql statement: alter system set db_unique_name = ''stbytst'' comment= '''' scope=spfile sql statement: alter system set control_files = ''/u01/app/oracle/oradata/pritst/control01.ctl'', ''/u01/app/oracle/oradata/pritst/control02.ct'' comment= '''' scope=spfile sql statement: alter system set fal_client = ''pritst'' comment= '''' scope=spfile sql statement: alter system set fal_server = ''stbytst'' 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=(pritst,stbytst)'' comment= '''' scope=spfile sql statement: alter system set log_archive_dest_1 = ''LOCATION=/u01/app/oracle/oradata/pritst/arch/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=stbytst'' comment= '''' scope=spfile sql statement: alter system set log_archive_dest_2 = ''service=pritst ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=pritst'' comment= '''' scope=spfile Oracle instance shut down connected to auxiliary database (not started) Oracle instance started Total System Global Area 1653518336 bytes Fixed Size 2213896 bytes Variable Size 956303352 bytes Database Buffers 687865856 bytes Redo Buffers 7135232 bytes allocated channel: stby channel stby: SID=17 device type=DISK contents of Memory Script: { backup as copy current controlfile for standby auxiliary format '/u01/app/oracle/oradata/pritst/control01.ctl'; restore clone controlfile to '/u01/app/oracle/oradata/pritst/control02.ct' from '/u01/app/oracle/oradata/pritst/control01.ctl'; } executing Memory Script Starting backup at 13-JUL-12 channel pri1: starting datafile copy copying standby control file output file name=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_pritst.f tag=TAG20120713T165706 RECID=2 STAMP=788547466 channel pri1: datafile copy complete, elapsed time: 00:01:05 Finished backup at 13-JUL-12 Starting restore at 13-JUL-12 channel stby: copied control file copy Finished restore at 13-JUL-12 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/app/oracle/oradata/pritst/temp01.dbf"; switch clone tempfile all; set newname for datafile 1 to "/u01/app/oracle/oradata/pritst/system01.dbf"; set newname for datafile 2 to "/u01/app/oracle/oradata/pritst/sysaux01.dbf"; set newname for datafile 3 to "/u01/app/oracle/oradata/pritst/undotbs01.dbf"; set newname for datafile 4 to "/u01/app/oracle/oradata/pritst/users01.dbf"; backup as copy reuse datafile 1 auxiliary format "/u01/app/oracle/oradata/pritst/system01.dbf" datafile 2 auxiliary format "/u01/app/oracle/oradata/pritst/sysaux01.dbf" datafile 3 auxiliary format "/u01/app/oracle/oradata/pritst/undotbs01.dbf" datafile 4 auxiliary format "/u01/app/oracle/oradata/pritst/users01.dbf" ; sql 'alter system archive log current'; } executing Memory Script executing command: SET NEWNAME renamed tempfile 1 to /u01/app/oracle/oradata/pritst/temp01.dbf in control file executing command: SET NEWNAME executing command: SET NEWNAME executing command: SET NEWNAME executing command: SET NEWNAME Starting backup at 13-JUL-12 channel pri1: starting datafile copy input datafile file number=00001 name=/u01/app/oracle/oradata/pritst/system01.dbf channel pri2: starting datafile copy input datafile file number=00002 name=/u01/app/oracle/oradata/pritst/sysaux01.dbf channel prmy4: starting datafile copy input datafile file number=00003 name=/u01/app/oracle/oradata/pritst/undotbs01.dbf output file name=/u01/app/oracle/oradata/pritst/sysaux01.dbf tag=TAG20120713T165818 channel pri2: datafile copy complete, elapsed time: 00:01:25 channel pri2: starting datafile copy input datafile file number=00004 name=/u01/app/oracle/oradata/pritst/users01.dbf output file name=/u01/app/oracle/oradata/pritst/undotbs01.dbf tag=TAG20120713T165818 channel prmy4: datafile copy complete, elapsed time: 00:01:26 output file name=/u01/app/oracle/oradata/pritst/system01.dbf tag=TAG20120713T165818 channel pri1: datafile copy complete, elapsed time: 00:01:51 output file name=/u01/app/oracle/oradata/pritst/users01.dbf tag=TAG20120713T165818 channel pri2: datafile copy complete, elapsed time: 00:00:45 Finished backup at 13-JUL-12 sql statement: alter system archive log current contents of Memory Script: { backup as copy reuse archivelog like "/u01/app/oracle/oradata/pritst/arch/1_13_788094679.dbf" auxiliary format "/u01/app/oracle/oradata/pritst/arch/1_13_788094679.dbf" ; catalog clone archivelog "/u01/app/oracle/oradata/pritst/arch/1_13_788094679.dbf"; switch clone datafile all; } executing Memory Script Starting backup at 13-JUL-12 channel pri1: starting archived log copy input archived log thread=1 sequence=13 RECID=12 STAMP=788547629 output file name=/u01/app/oracle/oradata/pritst/arch/1_13_788094679.dbf RECID=0 STAMP=0 channel pri1: archived log copy complete, elapsed time: 00:00:35 Finished backup at 13-JUL-12 cataloged archived log archived log file name=/u01/app/oracle/oradata/pritst/arch/1_13_788094679.dbf RECID=1 STAMP=788547664 datafile 1 switched to datafile copy input datafile copy RECID=2 STAMP=788547665 file name=/u01/app/oracle/oradata/pritst/system01.dbf datafile 2 switched to datafile copy input datafile copy RECID=3 STAMP=788547665 file name=/u01/app/oracle/oradata/pritst/sysaux01.dbf datafile 3 switched to datafile copy input datafile copy RECID=4 STAMP=788547665 file name=/u01/app/oracle/oradata/pritst/undotbs01.dbf datafile 4 switched to datafile copy input datafile copy RECID=5 STAMP=788547665 file name=/u01/app/oracle/oradata/pritst/users01.dbf contents of Memory Script: { set until scn 1205479; recover standby clone database delete archivelog ; } executing Memory Script executing command: SET until clause Starting recover at 13-JUL-12 starting media recovery archived log for thread 1 with sequence 13 is already on disk as file /u01/app/oracle/oradata/pritst/arch/1_13_788094679.dbf archived log file name=/u01/app/oracle/oradata/pritst/arch/1_13_788094679.dbf thread=1 sequence=13 media recovery complete, elapsed time: 00:00:00 Finished recover at 13-JUL-12 Finished Duplicate Db at 13-JUL-12 released channel: pri1 released channel: pri2 released channel: prmy4 released channel: stby RMAN> RMAN> **end-of-file** RMAN>
On the standby start the managed recovery process.
[oracle@ocm2 ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.1.0 Production on Fri Jul 13 17:17:15 2012 Copyright (c) 1982, 2009, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> alter database recover managed standby database disconnect from session; Database altered. SQL> exit Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options [oracle@ocm2 ~]$
At this point the duplicate is complete along with the dataguard environment. You can validate that that logs are shipping and applying. On the standby issue the following query.
SQL> select sequence#, first_time, next_time, applied 2 from v$archived_log 3 order by sequence#; SEQUENCE# FIRST_TIM NEXT_TIME APPLIED ---------- --------- --------- --------- 24 15-JUL-12 15-JUL-12 YES 25 15-JUL-12 15-JUL-12 YES 26 15-JUL-12 16-JUL-12 YES 3 rows selected. SQL>
On the primary database switch the logs a few times and use archive log list to information on the oldest, current and next log sequence.
[oracle@ocm1 ~]$ . oraenv ORACLE_SID = [oracle] ? pritst The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle [oracle@ocm1 ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.1.0 Production on Mon Jul 16 08:58:21 2012 Copyright (c) 1982, 2009, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> alter system switch logfile; System altered. SQL> alter system switch logfile; System altered. SQL> alter system switch logfile; System altered. SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination /u01/app/oracle/oradata/pritst/arch/ Oldest online log sequence 28 Next log sequence to archive 30 Current log sequence 30 SQL>
On the primary we see that after the log switches the current log sequence is 30 and the next sequence to archive is 30. On the standby re-issue the query from above to see what sequences have been applied to the standby.
SQL> select sequence#, first_time, next_time, applied 2 from v$archived_log 3 order by sequence#; SEQUENCE# FIRST_TIM NEXT_TIME APPLIED ---------- --------- --------- --------- 24 15-JUL-12 15-JUL-12 YES 25 15-JUL-12 15-JUL-12 YES 26 15-JUL-12 16-JUL-12 YES 27 16-JUL-12 16-JUL-12 YES 28 16-JUL-12 16-JUL-12 YES 29 16-JUL-12 16-JUL-12 YES 6 rows selected. SQL>
From the output above we can see that the standby has received and applied log sequence 29.
Great Work…Could you please post creation of Physical Standby with RMAN on Diffferent host with different directory structure??
Hi Eric,
Since several days, I’m going through your articles on ‘Oracle Distilled’. You have done a great work particularly on ‘RMAN’. I will visit this site frequently to learn more.
Thanks a lot.
Tirou
Excellent Job. Keep up all your hard-work.
Hi Eric,
a typo :
it is “alter system set remote_login_passwordfile=exclusive;”
Cheers René
hello there,
i am getting this error while perfroming active duplicate.pl help me out of tis.
Starting Duplicate Db at 09-JUL-14
released channel: pri1
released channel: pri2
released channel: prmy4
released channel: stby
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 07/09/2014 01:27:33
RMAN-06217: not connected to auxiliary database with a net service name
RMAN> **end-of-file**
Hi,
you made good presentation, however, you forgot you have not created Dataguard configuration, and nor started its daemon(DMON) plus you need to add database to the configuration.
What you have now is a standby database..Dataguard recovery session would conflict with you last command:
recover physical standby databsae disconnect from …
To be precise, if you go ahead and create dataguard configuration, then you would get following error:
ORA-01153: an incompatible media recovery is active.
you will then have to cancel the current recovery session:
alter database recover managed standby database cancel;
Then issue a compatible recovery command for Dataguard as follows:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
regards,
nazir
This is awesome document for learning for creating standy vis Rman.i am highly appreciating your time and efforts.
Dileep Tripathi
Thanks it was worth.
Hi,
I am bit confuse here. At the start of ‘Create Standby Shell’ when creating directory structure, why creating complete directory structure again for primary database? Could you please explain on this.
Thanks,
Sumit
I think no need to create directory structure on primary. Moreover Author also shone to create directory structure on DR server only
Thanks… Nice article
for RAC useres diable scan by running
srvctl stop scan
srvctl stop scan_listener
create static listener
& rock on 🙂
Thanks.It helped me
Hi blogger, i’ve been reading your page for some time and I really like coming back
here. I can see that you probably don’t make money on your site.
I know one interesting method of earning money, I think you
will like it. Search google for: dracko’s tricks
Excellent article. I will be experiencing many of these issues as well..