oracledba.help
DataGuard

System Maintenance Session

Brief

This covers the most minimal actions that need to be taken should your stand by system require maintenenace and need to be offline.

Scenarios


Scenario: Just Shutdown Primary

There is nothing that needs to be done on the Standby if the Primary is shut down for less than a day (for example, during a maintenance window).

PreChecks

-- On STANDBY
SELECT NAME, VALUE FROM V$DATAGUARD_STATS;

-- Expect:
-- transport lag  +00 00:00:00
-- apply lag      +00 00:00:00

-- On PRIMARY
SELECT DEST_ID, STATUS, ERROR
FROM V$ARCHIVE_DEST
WHERE STATUS <> 'INACTIVE';

Before Maintenance (Primary shutdown)

On PRIMARY
-- Prevent transport errors while Primary is down
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=DEFER SCOPE=BOTH;

-- Optional but clean: force last redo
ALTER SYSTEM SWITCH LOGFILE;
SHUTDOWN IMMEDIATE;

On STANDBY
-- Let MRP apply everything it has
-- (Do NOT cancel yet)

-- Optional verification
SELECT PROCESS, STATUS
FROM V$MANAGED_STANDBY
WHERE PROCESS='MRP0';

After Maintenance (Primary startup)

On PRIMARY
STARTUP;

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

On STANDBY
-- If MRP stopped automatically, restart it
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
USING CURRENT LOGFILE DISCONNECT FROM SESSION;

Post-Checks

-- On STANDBY
SELECT NAME, VALUE FROM V$DATAGUARD_STATS;

-- transport lag should return to 0
-- apply lag should return to 0

-- On PRIMARY
SELECT DEST_ID, STATUS, ERROR
FROM V$ARCHIVE_DEST
WHERE STATUS <> 'INACTIVE';

Scenario: Just Shutdown Standby

    Pre‑Checks
       SB: SELECT NAME, VALUE FROM V$DATAGUARD_STATS;

         NAME                             VALUE
         -------------------------------- ----------------------------------------------------------------
         transport lag                    +00 00:00:00
         apply lag                        +00 00:00:00
         apply finish time                +00 00:00:00.000
         estimated startup time           10

       PRI: SELECT DEST_ID, STATUS, ERROR FROM V$ARCHIVE_DEST WHERE STATUS <> 'INACTIVE';
           DEST_ID STATUS    ERROR
        ---------- --------- -----------------------------------------------------------------
                 1 VALID
                 2 VALID

     Before Maintenance 
        On STANDBY
          ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
          SHUTDOWN IMMEDIATE;
        On PRIMARY
          ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=DEFER SCOPE=BOTH;
     - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
     After Maintenance 
        On STANDBY
          STARTUP MOUNT;
          ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
        On PRIMARY
          ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE SCOPE=BOTH;
    Post‑Checks
       SB:  SELECT NAME, VALUE FROM V$DATAGUARD_STATS;
       PRI: SELECT DEST_ID, STATUS, ERROR FROM V$ARCHIVE_DEST WHERE STATUS <> 'INACTIVE';