oracledba.help
DataGuard

Rebuild SB (Data ReSync of Existing SB)

Overview

This process covers the refresh (AKA rebuild) of the SB.
Assumes all the base settings are the same, i.e. you just want to refresh the data on the SB.

 Role     Abbrev  Hostname  db_unique_name
 -------  ------  --------  --------------
 Primary  PRI     lnx01     dev
 StandBy  SB      lnx02     dev_sb
  • Change entries to match your PRI and SB environment.
  • SELECT value FROM v$parameter WHERE name = 'db_unique_name';

1. On SB, Create Fresh Parameter File (PFILE)

 cat <<EOF > $ORACLE_HOME/dbs/initdev.ora
 DB_NAME=dev
 DB_UNIQUE_NAME=dev_sb
 CONTROL_FILES='/u03/controlfiles/dev/control01.ctl'
 DB_CREATE_FILE_DEST='/u01/app/oracle/oradata/dev'
 DB_RECOVERY_FILE_DEST='/u02/fra/dev'
 DB_RECOVERY_FILE_DEST_SIZE=7000G
 FAL_SERVER=dev
 FAL_CLIENT=dev_sb
 LOG_ARCHIVE_CONFIG='DG_CONFIG=(dev,dev_sb)'
 LOG_ARCHIVE_DEST_2='SERVICE=dev LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dev'
 EOF

Remove leading space from each line.

2. On SB, Ensure Directory Structure Exists

 mkdir -p /u01/app/oracle/oradata/dev
 mkdir -p /u02/fra/dev
 mkdir -p /u03/controlfiles/dev
 mkdir -p /u01/app/oracle/admin/dev/adump
 chown -R oracle:oinstall /u01 /u02 /u03

3. On SB, Start NOMOUNT Using the PFILE

 export ORACLE_SID=dev
 sqlplus / as sysdba
 STARTUP NOMOUNT PFILE='$ORACLE_HOME/dbs/initdev.ora';

4. From PRI, Recreate Password File

 ping lnx02
 scp /u01/app/oracle/product/19.3.0.0.0/dbhome_1/dbs/orapwdev oracle@lnx02:$ORACLE_HOME/dbs/orapwdev

5. On SB, Prepurge Stale Datafiles

 rm -rf /u02/oradata/DEV_SB/*
 rm -f /u03/controlfiles/dev/control01.ctl

 Check disk space: df -h

6. On PRI, run RMAN DUPLICATE

 rman target sys/********@dev auxiliary sys/********@dev_sb
 connected to target database: DEV (DBID=4191999671)
 connected to auxiliary database: DEV (not mounted)

 If not connected as shown:
 SHUTDOWN IMMEDIATE then STARTUP NOMOUNT PFILE='$ORACLE_HOME/dbs/initdev.ora';

 RMAN>
 DUPLICATE TARGET DATABASE 
   FOR STANDBY 
   FROM ACTIVE DATABASE 
   DORECOVER 
   SPFILE
     SET DB_UNIQUE_NAME='dev_sb'
     SET DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/dev','/u01/app/oracle/oradata/dev'
     SET LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/dev','/u01/app/oracle/oradata/dev'
     SET DB_RECOVERY_FILE_DEST='/u02/fra/dev'
     SET CONTROL_FILES='/u03/controlfiles/dev/control01.ctl'
 NOFILENAMECHECK;

  On SB: watch -n 10 df -h /u02 /u03 /u01
  with 10gb network: [Est. 2 Hours of 7tb database]

7. On SB, Enable Flashback and Start Recovery

   -- Start Redo Apply (initial test)
   ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

   -- Confirm MRP0 recovery process
   SELECT PROCESS, STATUS, THREAD#, SEQUENCE# FROM V$MANAGED_STANDBY;
   You should see: MRP0 with status like WAIT_FOR_LOG

   -- Stop Recovery → Enable Flashback → Restart Recovery
   ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
   ALTER DATABASE FLASHBACK ON;
   ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

8. On PRI, Restore Data Guard Parameters and Resume Redo Transport
If you previously cleared any Data Guard config (e.g. LOG_ARCHIVE_DEST_2='')
before the schema refresh, you must now restore them.

   -- Reconfigure redo shipping to the SB
   ALTER SYSTEM SET LOG_ARCHIVE_DEST_2 = 'SERVICE=dev_sb LGWR ASYNC 
      VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dev_sb' SCOPE=BOTH;

   -- Restore Data Guard configuration awareness
   ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(dev,dev_sb)' SCOPE=BOTH;

   -- Re-enable redo transport
   ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE SCOPE=BOTH;

   -- Confirm status is VALID
   SELECT DEST_ID, STATUS, ERROR FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID = 2;

9. Post-Validation Checks

   -- Confirm redo apply is active
   SELECT PROCESS, STATUS, THREAD#, SEQUENCE# FROM V$MANAGED_STANDBY;

   -- Confirm archive destination status and apply sequence
   SELECT DEST_ID, STATUS, APPLIED_SEQ# FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID > 1;

   -- Confirm standby role, open mode, switchover readiness
   SELECT NAME, OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS FROM V$DATABASE;

   -- Confirm Flashback Database is ON
   SELECT FLASHBACK_ON FROM V$DATABASE;

As Needed

Reset RMAN

The following command resets all the RMAN parameters back to their default values.

 SQL> execute dbms_backup_restore.resetConfig;

Reset RMAN values for your environment (rman.cfg.rmn).

 # rman.cfg.rmn
 CONFIGURE COMPRESSION ALGORITHM 'MEDIUM';
 CONFIGURE CONTROLFILE AUTOBACKUP on;
 CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE disk TO '/u04/dev/rman/%F';
 CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;
 CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u03/rman/snapshot.ctl';

 CONFIGURE DEVICE TYPE disk BACKUP TYPE TO compressed backupset PARALLELISM 4;
 CONFIGURE CHANNEL 1 DEVICE TYPE disk FORMAT '/u04/dev/rman/%U.bkp';
 CONFIGURE CHANNEL 2 DEVICE TYPE disk FORMAT '/u04/dev/rman/%U.bkp';
 CONFIGURE CHANNEL 3 DEVICE TYPE disk FORMAT '/u04/dev/rman/%U.bkp';
 CONFIGURE CHANNEL 4 DEVICE TYPE disk FORMAT '/u04/dev/rman/%U.bkp';

 show all;