Oracle 10gR2 RAC Standby DB Creation Guide

.....................................................................Table of Contents 1 Introduction.............................17 Page 2 of 18 ................................................13 5 Managing the Standby Database................................................................................................................................................................3 2 Creating a RAC enabled Standby Database Using RMAN.................................................3 3 Configure the Oracle Cluster Registry.......12 4 Enable Archiving to the Standby and Check for Log Gaps.................................................16 Appendix B..............................................................................................................................................................................................15 Appendix A.......

In a standby database configuration dataguard uses various initialization parameters including db_unique_name. Also. SQL> select * from gv$logfile. 2. The primary database‘s db_unique_name is the same as its database name. Ensure all logging is enabled: SQL> alter database force logging.262. which should be the app pneumonic with a P attached (i. then the first standby redo log group for each thread will be ‘GROUP 5’. the existing database must be using an Rman catalog and the primary database’s backup filesystem/directory structure on the primary database server must be created on the destination environment.------. if there are 4 redo log groups for each thread.------MEMBER -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------IS_ --1 1 ONLINE +SHARED_AUXFILES_DG01/cidwp/onlinelog/group_1.1 Steps to perform on all primary database nodes: 1. TESTP). then create 5 standby redo log groups for each thread. The size must match the size of the existing redo logs. Create tns entries for the primary and standby database services. Create ‘standby’ redo logs. INST_ID GROUP# STATUS TYPE ---------. The number of standby redo log groups for each thread should equal the number of redo log groups for each thread + 1.1 Introduction This document is to assist in the creation of an Oracle 10gR2 RAC enabled standby database. In this document. To use RMAN to create the standby database. Repeat this command for each thread and each group of each thread. The standby database’s name is also TESTP and the standby’s db_unique_name should be the same app pneumonic with a C attached (i.---------. If there are 4 redo log groups for each thread.e.706186617 NO Page 3 of 18 . In our environments the primary database name and the standby database name are the same. 2 Creating a RAC enabled Standby Database Using RMAN 2. If necessary.2 Steps to perform on node 1 of the primary database: 1. It adheres to the standards and best practices outlined in Oracle’s Maximum Availability Architecture (MAA) Best Practices. For each thread (instance) create standby redo logs. Change the thread number and group number below to the appropriate numbers. 2. the standby db_unique_name is referred to as STDBY_DB_U_NAME. See Appendix A.e. Create a password file in $ORACLE_HOME/dbs: $ orapwd file=$ORACLE_HOME/dbs/orapwINSTANCE_NAME password=sys_pwd 3. TESTC). Also change the size.

706186617 NO 2 1 ONLINE +SHARED_DATA_DG01/cidwp/onlinelog/group_1.706186619 NO 2 2 ONLINE +SHARED_AUXFILES_DG01/cidwp/onlinelog/group_2.262.263.706186943 NO 1 4 ONLINE +SHARED_DATA_DG01/cidwp/onlinelog/group_4.706186619 NO 2 2 ONLINE +SHARED_DATA_DG01/cidwp/onlinelog/group_2.706186619 NO 1 3 ONLINE +SHARED_AUXFILES_DG01/cidwp/onlinelog/group_3.270.279.706186943 NO 2 3 ONLINE +SHARED_DATA_DG01/cidwp/onlinelog/group_3.706186943 NO 2 1 ONLINE +SHARED_AUXFILES_DG01/cidwp/onlinelog/group_1.1 1 ONLINE +SHARED_DATA_DG01/cidwp/onlinelog/group_1.706186619 NO 2 3 ONLINE +SHARED_AUXFILES_DG01/cidwp/onlinelog/group_3.264.706186943 NO 1 4 ONLINE +SHARED_AUXFILES_DG01/cidwp/onlinelog/group_4.265.271.279.706186943 NO Page 4 of 18 .271.280.265.270.706186943 NO 2 4 ONLINE +SHARED_AUXFILES_DG01/cidwp/onlinelog/group_4.264.706186619 NO 1 2 ONLINE +SHARED_AUXFILES_DG01/cidwp/onlinelog/group_2.706186943 NO 1 3 ONLINE +SHARED_DATA_DG01/cidwp/onlinelog/group_3.263.706186619 NO 1 2 ONLINE +SHARED_DATA_DG01/cidwp/onlinelog/group_2.

280. SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD X GROUP X ('+SHARED_DATA_DG01'.ora’ from spfile. Page 5 of 18 .2 4 ONLINE +SHARED_DATA_DG01/cidwp/onlinelog/group_4.706186943 NO 16 rows selected. Create an updated pfile from the spfile: SQL> create pfile=’/oracle/admin/DB_NAME/pfile/initDB_NAME. 4. '+SHARED_AUXFILES_DG01') SIZE XXM.

ALL_ROLES) DB_UNIQUE_NAME=TESTP’ = ‘SERVICE=TESTC LGWR ASYNC REOPEN=60 VALID_FOR=(ONLINE_LOGFILES. '+SHARED_AUXFILES_DG01/ TESTC /'. PRIMARY_ROLE) DB_UNIQUE_NAME=TESTC’ = DEFER = ‘LOCATION=USE_DB_RECOVERY_FILE_DEST’ = AUTO = '+SHARED_DATA_DG01/TESTC/'. '+SHARED_DATA_DG01/ TESTP /'. PRIMARY_ROLE) DB_UNIQUE_NAME= STDBY_DB_U_NAME’ = DEFER = ‘LOCATION=USE_DB_RECOVERY_FILE_DEST’ = AUTO = '+SHARED_DATA_DG01/STDBY_DB_U_NAME/'. ALL_ROLES) DB_UNIQUE_NAME= DB_NAME’ = ‘SERVICE=STDBY_DB_U_NAME LGWR ASYNC REOPEN=60 VALID_FOR=(ONLINE_LOGFILES. '+SHARED_AUXFILES_DG01/STDBY_DB_U_NAME/'. '+SHARED_DATA_DG01/DB_NAME/' = '+SHARED_DATA_DG01/STDBY_DB_U_NAME/'. '+SHARED_DATA_DG01/ TESTP /' = '+SHARED_DATA_DG01/ TESTC /'. '+SHARED_AUXFILES_DG01/DB_NAME/' Example: db_unique_name fal_client fal_server log_archive_config log_archive_dest_1 log_archive_dest_2 log_archive_dest_state_2 standby_archive_dest standby_file_management db_file_name_convert log_file_name_convert = TESTP = TESTP = TESTC = ‘DG_CONFIG=(TESTP. Recreate the spfile: $ srvctl stop database –d DB_NAME Page 6 of 18 .5. STDBY_DB_U_NAME)’ = ‘LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES. '+SHARED_DATA_DG01/DB_NAME/'. '+SHARED_AUXFILES_DG01/ TESTP /' 6. TESTC)’ = ‘LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES. Edit the initialization file and set Standby and Archiving parameters: db_unique_name fal_client fal_server log_archive_config log_archive_dest_1 log_archive_dest_2 log_archive_dest_state_2 standby_archive_dest standby_file_management db_file_name_convert log_file_name_convert = DB_NAME = DB_NAME = STDBY_DB_U_NAME = ‘DG_CONFIG=(DB_NAME.

create a tns entry for the database’s Rman catalog database.ora’ from pfile=’/oracle/admin/DB_NAME/pfile/initDB_NAME. > shutdown immediate $ srvctl start service –d DB_NAME 8. Start up the database. Create admin directories and symbolic link for the database under $ORACLE_BASE/admin/DB_NAME: Directories: adump bdump cdump udump pfile create local Symbolic Link: backup -> /ora01/orabkup/DB_NAME 2.SQL> create spfile=’+shared_auxfiles_dg01/DB_NAME/parameterfile/spfileDB_NAME. 7.0/db_1:N 3.ora’. controlfile.2. Backup the primary database. Also. RMAN> configure channel device type disk clear. The rman 10g schema owner/pwd for E&Os shared rman catalog is: rman10g/rmandba: RMAN> connect target / RMAN> connect catalog rman_schema_owner/rman_schema_pwd@rman_catalog_db RMAN> configure channel device type disk format ‘/ora01/rman_dup/CIDWP/%d_%s_%p_%T’. if necessary enable archiving first: SQL> startup mount > alter database archivelog. and archive logs to /ora01/orabkup/DB_NAME/stdby. Put an entry into oratab for the instances: INSTANCE_NAME:/oracle/product/10.3 Steps to perform on all nodes of the standby database cluster: 1. Create tns entries for the primary and standby databases and create the local/remote listener entry for the standby database (See Appendix A). Page 7 of 18 . RMAN> backup as compressed backupset database > include current controlfile for standby > plus archivelog. 2.

4 Steps to perform on node 1 of the standby database cluster: 1. 3. Create initINSTANCE_NAME.ora in $ORACLE_HOME/dbs with the following entry: spfile=’+shared_auxfiles_dg01/STDBY_DB_U_NAME/parameterfile/spfileDB_NAME. Create a tnsnames entry for the primary database’s Rman catalog if it is different than the rman catalog entered earlier. Page 8 of 18 . Copy the primary database’s backup files and the parameter file to the above directory. Create the database’s backup filesystem directory: /ora01/orabkup/DB_NAME/stdby 2.4.ora’ 6. Create a password file in $ORACLE_HOME/dbs: $ orapwd file=$ORACLE_HOME/dbs/orapwINSTANCE_NAME password=sys_pwd 2. Tnsping the primary and standby databases and the rman catalog: $ tnsping DB_NAME $ tnsping STDBY_DB_U_NAME $ tnsping rman_catalog_db 5.

PRIMARY_ROLE) DB_UNIQUE_NAME=DB_NAME ’ = '+SHARED_DATA_DG01/DB_NAME/'. '+SHARED_AUXFILES_DG01/STDBY_DB_U_NAME/' Example: db_unique_name fal_client fal_server log_archive_config log_archive_dest_1 log_archive_dest_2 db_file_name_convert log_file_name_convert = TESTC = TESTC = TESTP = ‘DG_CONFIG=(TESTP. Create the spfile: SQL> create spfile=’+shared_auxfiles_dg01/STDBY_DB_U_NAME/parameterfile/spfileDB_NAME. '+SHARED_DATA_DG01/STDBY_DB_U_NAME/'.ora’ Page 9 of 18 . PRIMARY_ROLE) DB_UNIQUE_NAME=TESTP’’ = '+SHARED_DATA_DG01/TESTP/'. '+SHARED_DATA_DG01/STDBY_DB_U_NAME/' = '+SHARED_DATA_DG01/DB_NAME/'. oraenv ………> +ASM1 ………> /oracle/product/10. '+SHARED_DATA_DG01/TESTC/'.4. '+SHARED_AUXFILES_DG01/TESTP/'.0/asm_1 $ asmcmd ASMCMD> mkdir +shared_auxfiles_dg01/STDBY_DB_U_NAME/parameterfile ASMCMD> exit 5. Set the Oracle environment for the database instance: $ . Create the ASM directory for the spfile: $ . '+SHARED_AUXFILES_DG01/DB_NAME/'. TESTC)’ = ‘LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES. '+SHARED_DATA_DG01/TESTC/' = '+SHARED_DATA_DG01/TESTP/'. '+SHARED_AUXFILES_DG01/TESTC/' 7. STDBY_DB_U_NAME)’ = ‘LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES. ALL_ROLES) DB_UNIQUE_NAME=STDBY_DB_U_NAME’ = ‘SERVICE=DB_NAME LGWR ASYNC REOPEN=60 VALID_FOR=(ONLINE_LOGFILES.2. Edit the initialization file and set Standby and Archiving parameters for the standby database: db_unique_name fal_client fal_server log_archive_config log_archive_dest_1 log_archive_dest_2 db_file_name_convert log_file_name_convert = STDBY_DB_U_NAME = STDBY_DB_U_NAME = DB_NAME = ‘DG_CONFIG=(DB_NAME. ALL_ROLES) DB_UNIQUE_NAME=TESTC’ = ‘SERVICE= TESTP LGWR ASYNC REOPEN=60 VALID_FOR=(ONLINE_LOGFILES. oraenv ………> INSTANCE_NAME 6.

} RMAN> exit 11.ora’.xxx.0/asm_1 $ asmcmd ASMCMD> cd +SHARED_DATA_DG01/STDBY_DB_U_NAME/CONTROLFILE ASMCMD> ls ASMCMD> rm current.ora’ from pfile=‘/oracle/admin/DB_NAME/pfile/initDB_NAME. Ensure that the database services (DB_NAME and STDBY_DB_U_NAME) are registered with the listener: $ lsnrctl status orals01_nodename The database service and instance should be listed.from pfile=’/oracle/admin/DB_NAME/pfile/initDB_NAME. ASMCMD> exit 14. If necessary.xxxxxxxxx # Remove the control file that is not being used. 8. Set the Oracle environment back to the database instance environment: $ . duplicate target database for standby dorecover nofilenamecheck.ora’. 10. remove unused control files that were created by the duplicate database process: $ export ORACLE_SID=+ASM1 $ export ORACLE_HOME=/oracle/product/10. Start up the database instance: SQL> startup nomount 9. recreate the spfile: SQL> shutdown immediate SQL> create spfile=’+shared_auxfiles_dg01/STDBY_DB_U_NAME/parameterfile/spfileDB_NAME. Get the paths and names of the controlfiles: SQL> show parameter control_files b. 13.2. The status will be ‘BLOCKED’. If the names of the control files changed. 12. oraenv Page 10 of 18 . edit the pfile and modify the control_files parameter: a.xxxxxxxxx # Remove the control file that is not being used. If necessary.xxx. ASMCMD> cd +SHARED_FRA_DG01/STDBY_DB_U_NAME/CONTROLFILE ASMCMD> ls ASMCMD> rm current. Change the value for control_files in the parameter file to the value returned above. Create the standby database: $ rman RMAN> connect target sys/sys_pwd@DB_NAME RMAN> connect catalog rman_schema_owner/rman_schema_pwd@rman_catalog_db RMAN> connect auxiliary / RMAN> run { allocate auxiliary channel stdby type disk.

Shutdown the database: SQL> shutdown immediate Page 11 of 18 .………> INSTANCE_NAME 15. then there were 5 standby redo log groups created on the production database. '+SHARED_AUXFILES_DG01') SIZE XXM. Change the Xs below to the appropriate numbers. As with the production database. SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD X GROUP X ('+SHARED_DATA_DG01'. Also change the size. If there are 4 redo log groups for each thread. The first group number here will be the number of redo log groups + the number of standby redo log groups created on the production database + 1. create ‘standby’ redo logs on the standby database. so the first standby redo log group created here would be ‘GROUP 10’ for each thread. The size must match the size of the existing redo logs. 17. Create the same number of ‘standby’ redo log groups on the standby database that you created on the production database. Mount the database: SQL> startup mount 16.

Ensure that all instances are shutdown on all nodes. If one or more instances have been configured as “available” instances. The “srvctl add service” options are: -s -r -a -P for the service name for the preferred instance list for the available instance list for the TAF policy. Add the database. and those available instances are up and running. If the application has not configured Fast Connection Failover (FCF) then use BASIC failover. Add additional primary instances if necessary. remove the “–a…” option.3 Configure the Oracle Cluster Registry 3. and service to the Oracle Cluster Registry and start them: $ srvctl add database –d DB_NAME –o $ORACLE_HOME –p +shared_auxfiles_dg01/STDBY_DB_U_NAME/parameterfile/spfileDB_NAME. Change P_INSTX to the preferred instance names of the database. the service will distribute connections across the remaining “preferred” instances and one or more “available” instance. the service will distribute connections across the remaining “preferred” instances. Add additional available instance if necessary. Change A_INSTX to the available instance names of the database. A service will distribute connections across all running “preferred” instances of a database. If the application has configured FCF then use NONE.… –P BASIC Page 12 of 18 . instances. 2.INSTANCE_NAME2. Change the failover option (–P) to either NONE or BASIC.A_INSTX –P NONE/BASIC EXAMPLE (Assuming all instances are preferred and TAF policy=BASIC): $ srvctl add service -d DB_NAME -s DB_NAME_SRV01 -r INSTANCE_NAME1.P_INSTX -a A_INST1. SRVCTL SYNTAX: $ srvctl add service -d DB_NAME -s DB_NAME_SRV01 -r P_INST1. either NONE or BASIC Instances can be configured as PREFERRED or AVAILABLE instances. If no “available” instances have been configured and a “preferred” instance goes down. and one or more “preferred” instances go down. If all instances are preferred instances.Add additional instances if necessary.ora –r PHYSICAL_STANDBY –s mount –y automatic $ srvctl add instance -d DB_NAME -i DB_NAME1 -n NODE_NAME_1 $ srvctl add instance -d DB_NAME -i DB_NAMEn -n NODE_NAME_n $ --.1 Steps to perform on node 1 of the standby database: 1. Create a service for the database and add it to the OCR configuration.

3.INST_NAME.… -o mount PRKP-1030 : Failed to start the service DB_NAME_SRV01. Edit the primary database init file and change the following line: log_archive_dest_state_2 = enable 2. This will do a log switch on all primary database instances.DB_NAME. Ensure that the database service and instances are registered with the listener: $ lsnrctl status orals01_nodename The database services and instances should be listed. This service will not be started until the database has been failed over. Execute a log switch: SQL> alter sytem archive log current.srv'.srv'. b) Put the database into managed recovery mode: SQL> alter database recover managed standby database using current logfile disconnect. # These errors are ok. # These errors are ok. Verify that the archive logs were created on the standby database servers. Start the standby database instances in managed recovery mode: a) If all instances for the database are to be started: $ srvctl start service –d DB_NAME -o mount PRKP-1030 : Failed to start the service DB_NAME_SRV01. If only certain instance are to be started: $ srvctl start service –d DB_NAME –s DB_NAME_SRV01 –i INST_NAME1. enable the transfer of archive logs to the standby server: SQL> alter system set log_archive_dest_state_2=enable scope=both.INST_NAME. 4. The status should be ‘READY’. Page 13 of 18 .INST_NAME2. This service will not be started until the database has been failed over. From node 1 of the primary database cluster.DB_NAME_SRV01.DB_NAME_SRV01. 4 Enable Archiving to the Standby and Check for Log Gaps 4. CRS-0215: Could not start resource 'ora.1 Enable Archiving to the Standby: 1. Check the status of the database instance(s): $ srvctl status database –d DB_NAME 5.DB_NAME. CRS-0215: Could not start resource 'ora.

sequence#. repeat the appropriate steps above until there are no more gaps. If rows are returned. sequence#.. Check again for an archive log gap: SQL> select * from v$archive_gap. SQL> alter database recover managed standby database disconnect. name > from v$archived_log > where thread# = THREAD# > and sequence# between LOW_SEQUENCE# and HIGH_SEQUENCE#. SQL> alter database recover managed standby database cancel. and HIGH_SEQUENCE# are the values from the above query. 2. > alter database register logfile ‘/logfile_path/logfile_name’ Where: logfile_path is the backup filesystem path and logfile_name is the name of one of the missing archive logs. place the standby database in managed recovery mode. archived. If rows are returned.2.4. applied > from v$archived_log > order by 1. $ srvctl stop database –d DB_NAME Mount the standby database instance and register the missed archive log(s): SQL> startup nomount > alter database mount standby database. Copy the missed archive log files from the primary database server to the standby (see Appendix B) Shutdown all of the standby database instances. Where: THREAD#. On node 1 of the standby database cluster check for archive log gaps on the standby database: SQL> select * from v$archive_gap.2 Check for Archive Log Gaps: 1. 3. LOW_SEQUENCE#. Archive logs should start being applied (‘applied’ should equal YES for some logs) and eventually all but the last archived log (and any duplicate entries) should be applied Page 14 of 18 . Once all of the log files have been registered in the standby database. Verify that the archive logs are being applied: SQL> select thread#. get the name(s) of the missing archive log files: SQL> select thread#.

Page 15 of 18 . To put the standby database back into managed recovery mode from read only mode: The best way is to shutdown the instances and start them up in managed recovery mode: $ srvctl stop database –d DB_NAME $ srvctl start service –d DB_NAME -o mount or $ srvctl start service –d DB_NAME –s DB_NAME_SRV01 –i INST_NAME1. To shutdown the database: Sqlplus> alter database recover managed standby database cancel.INST_NAME2. It can be done directly from read only mode: Sqlplus> alter database recover managed standby database disconnect.5 Managing the Standby Database To start the standby database in managed recovery mode: $ srvctl start service –d DB_NAME -o mount or $ srvctl start service –d DB_NAME –s DB_NAME_SRV01 –i INST_NAME1.… -o mount Sqlplus> alter database recover managed standby database disconnect. > alter database open read only.INST_NAME2.… -o mount Sqlplus> alter database recover managed standby database disconnect. $ srvctl stop database –d DB_NAME To open the database in read-only mode: During startup (instead of putting the database in managed recovery mode): Sqlplus> alter database open read only. To stop managed recover: Sqlplus> alter database recover managed standby database cancel. While in managed recovery mode: Sqlplus> alter database recover managed standby database cancel.

Appendix A Change ‘DB_NAME’ and ‘STDBY_DB_U_NAME’ to the appropriate names. Change the ‘STDBY_HOST_VIP_1/n’ to the names of the virtual ip address (VIP) where the standby database is located. Change the port numbers ‘XXXX’ to the appropriate number. Change the ‘PRIMARY_HOST_VIP_1/n’ to the names of the virtual ip address (VIP) where the primary database is located. Add additional address entries if more nodes/instances are created. Service Name Entries: DB_NAME = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = PRIMARY_HOST_VIP1)(PORT = XXXX)) (ADDRESS = (PROTOCOL = TCP)(HOST = PRIMARY_HOST_VIPn)(PORT = XXXX)) (FAILOVER = yes) (LOAD_BALANCE = yes) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = DB_NAME ) (FAILOVER_MODE = (TYPE = SELECT) (METHOD = BASIC) (RETRIES = 180) (DELAY = 5))) ) STDBY_DB_U_NAME = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = STDBY_HOST_VIP1)(PORT = XXXX)) (ADDRESS = (PROTOCOL = TCP)(HOST = STDBY_HOST_VIPn)(PORT = XXXX)) (FAILOVER = yes) (LOAD_BALANCE = yes) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = STDBY_DB_U_NAME) (FAILOVER_MODE = (TYPE = SELECT) (METHOD = BASIC) (RETRIES = 180) (DELAY = 5))) ) Listener Entries: On each node of the standby there should be entries for the standby database and all instances: LISTENERS_DB_NAME = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = STDBY_HOST_VIP1)(PORT = XXXX)(QUEUESIZE = 64)) (ADDRESS = (PROTOCOL = TCP)(HOST = STDBY_HOST_VIPn)(PORT = XXXX)(QUEUESIZE = 64)) ) LISTENER_INSTANCE_NAME1 = (ADDRESS = (PROTOCOL = TCP)(HOST = STDBY_HOST_VIP1)(PORT = XXXX)(QUEUESIZE = 64)) LISTENER_INSTANCE_NAMEn = (ADDRESS = (PROTOCOL = TCP)(HOST = STDBY_HOST_VIPn)(PORT = XXXX)(QUEUESIZE = 64)) Page 16 of 18 .

> source_file_name => 'ARCHIVELOG_FILE_NAME'. name > from v$archived_log > where thread# = THREAD# > and sequence# between LOW_SEQUENCE# and HIGH_SEQUENCE#. SQL> create or replace directory ARCH_COPY_DEST as '/ora01/orabkup/DB_NAME/archive_logs'. > END. Where: THREAD#.Appendix B Copying archive logs located on ASM diskgroups from one server to another. > destination_file_name => 'ARCHIVELOG_FILE_NAME'). If the missed archive logs span more that one day. LOW_SEQUENCE#. > destination_directory_object => 'ARCH_COPY_DEST'. >/ Where: ARCHIVELOG_FILE_NAME is the name of an archive log returned from the query above. Copy the archive logs to the backup filesystem on node 1 of the standby database.copy_file(source_directory_object => 'ARCH_DIR'. Create Oracle “directories”. repeat the first command with a new name for each directory: SQL> create or replace directory ARCH_DIR as '+SHARED_FRA_DG01/DB_NAME/ARCHIVELOG/YYYY_MM_DD'. Create a directory for the archive logs on the backup filesystem on node 1 of both the primary and standby clusters: $ mkdir /ora01/orabkup/DB_NAME/archive_logs On node 1 of the primary database cluster: Get the ASM path and name of the missing archive logs: SQL> select thread#. Page 17 of 18 . sequence#. Repeat this for all missing archive logs. Copy the archive logs from ASM to the backup filesystem: SQL> set serveroutput on SQL> BEGIN > dbms_file_transfer. and HIGH_SEQUENCE# are the values returned from v$archive_gap on the standby database.

Page 18 of 18 .