oracledba.help
DataGuard

Rebuild SB (Data ReSync of Existing SB)

๐Ÿ”น Before Refresh (Disable Standby)

On PRIMARY (d2-orasolo-p01):

 1. Defer redo transport to prevent archivelog sync buildup:
    ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=DEFER SCOPE=BOTH;

 2. (Optional but recommended) Run RMAN full backup
    # RMAN shell
   CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;
   BACKUP DATABASE PLUS ARCHIVELOG;

 3. (Optional) Document log sequence# at time of cutover
    SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG WHERE DEST_ID=1;

 4. On STANDBY (d1-orasolo-p01):
    Cancel managed recovery:
    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

 5. Shutdown the standby:
    SHUTDOWN IMMEDIATE;

 6. (Optional Cleanup) Free up space:
    rm -rf /u01/app/oracle/oradata/dnasolo/*
    rm -rf /u02/fra/dnasolo/*
    rm -rf /u03/controlfiles/dnasolo/*
    rm -f  $ORACLE_HOME/dbs/orapwdnasolo

At this point, the standby is offline and clean. Now proceed with your schema/data refresh on the primary.

๐Ÿ”น After Refresh (Rebuild the Standby)

1. On STANDBY, create fresh initdnasolo.ora:

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

2. Start NOMOUNT using the PFILE:

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

3. Ensure directory structure exists:

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

4. Recreate or copy password file:

   Option A (preferred): Copy from primary
      scp /u01/app/oracle/product/19.3.0.0.0/dbhome_1/dbs/orapwdnasolo oracle@d1-orasolo-p01:$ORACLE_HOME/dbs/orapwdnasolo
   Option B: Recreate
      orapwd file=$ORACLE_HOME/dbs/orapwdnasolo password=*** format=12

5. On PRIMARY, run RMAN DUPLICATE:

   rman target sys/***@dnasolo auxiliary sys/***@dnasolo_sb
DUPLICATE TARGET DATABASE 
  FOR STANDBY 
  FROM ACTIVE DATABASE 
  DORECOVER 
  SPFILE
    SET DB_UNIQUE_NAME='dnasolo_sb'
    SET DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/dnasolo','/u01/app/oracle/oradata/dnasolo'
    SET LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/dnasolo','/u01/app/oracle/oradata/dnasolo'
    SET DB_RECOVERY_FILE_DEST='/u02/fra/dnasolo'
    SET CONTROL_FILES='/u03/controlfiles/dnasolo/control01.ctl'
  NOFILENAMECHECK;

6. Enable Flashback (if needed):

   ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
   ALTER DATABASE FLASHBACK ON;
   ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

7. Resume redo transport on PRIMARY:

   ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE SCOPE=BOTH;

8. Post-Validation

   Confirm redo apply:
   SELECT PROCESS, STATUS, THREAD#, SEQUENCE# FROM V$MANAGED_STANDBY;

   Confirm archive apply and role:
   SELECT DEST_ID, STATUS, APPLIED_SEQ# FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID > 1;
   SELECT NAME, OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS FROM V$DATABASE;

   Confirm flashback:
   SELECT FLASHBACK_ON FROM V$DATABASE

๐Ÿงพ Summary: Key Rebuild Notes Phase Action Pre-Refresh Stop MRP, shutdown SB, DEFER transport During Perform schema/data refresh on Primary Post-Refresh Recreate SB via RMAN DUPLICATE Finalize Re-enable flashback, redo apply, transport

Would you like this turned into a shell script or PDF runbook? @]