How to Sync Physical Standby Database


Yesterday I was troubleshooting Standby database sync issue with primary, everything was normal then what was the issue?

1.         Standby Server was rebooted 2 days ago

oracle@hostdr0007:/home/oracle> uptime
03:19am  up 2 days  0:29,  2 users,  load average: 0.20, 0.28, 0.36

2.         Investigate MRP and lag

 SQL> select PROCESS,THREAD#,SEQUENCE#,STATUS from gv$managed_standby;
 PROCESS      THREAD#  SEQUENCE# STATUS
--------- ---------- ---------- ------------
ARCH               0          0 CONNECTED
ARCH               0          0 CONNECTED
ARCH               0          0 CONNECTED
ARCH               0          0 CONNECTED
MRP0               1      95886 WAIT_FOR_LOG                                            
 **Mrp was running , RFS was not receiving data .

3.         Check error from Primary

SQL> select inst_id,status,error from gv$archive_dest where dest_id=2;
   INST_ID STATUS    ERROR
---------- --------- -----------------------------------------------------------------
         1 ERROR     ORA-01033: ORACLE initialization or shutdown in progress             
 **  looks like pwd issue
 SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     96160
Next log sequence to archive   96163
Current log sequence           96163        
      **        lag was not huge

4.     Compare pwd file from Standby and Primary:   Password file was ok, output of cksum from both server.

cd $ORACLE_HOME/dbs
/oracle/app/oracle/product/12102/db1a16/dbs PACMAN]>cksum orapwPACMAN
2969142013 53760 orapwPACMAN
cd $ORACLE_HOME/dbs
/oracle/app/oracle/product/11203/db1a13/dbs PACMANDG]>cksum orapwPACMANDG
2969142013 53760 orapwPACMANDG

5.       Voila! Standby was running with incorrect home, notice above. May be mixed version between a primary database and a DG physical standby supports, but no one wants to keep it that way.

6.       Oratab was having incorrect entry of 11.2.0.3 , one last confirmation was done on crosschecking the alert logs

PACMANDG:/oracle/app/oracle/product/11203/db1a13:N     # line added by Agent
#PACMANDG:/oracle/app/oracle/product/11203/db1a13:N    # line added by Agent
#PACMANDG:/oracle/app/oracle/product/11203/db1a13:N    # line added by Agent

7.        Look further srvctl was not configured properly, possibly upgrade misfall

/oracle/app/oracle/product/12102/db1a16/dbs PACMANDG]>srvctl config database -d PACMAN
PRCD-1229 : An attempt to access configuration of database PACMAN was rejected because its version 11.2.0.3.0 differs from the program version 12.1.0.2.0. Instead, run the program from /oracle/app/oracle/product/11203/db1a13.

8.       Upgrade the configuration of the DB and all of its services

/oracle/app/oracle/product/12102/db1a16/dbs PACMANDG]>$ORACLE_HOME/bin/srvctl upgrade database -db PACMAN -o /oracle/app/oracle/product/12102/db1a16

9.       Modify necessary configurations, in case of any challenges try to remove and add new config .

/oracle/app/oracle/product/12102/db1a16/dbs PACMANDG]>srvctl modify database -d PACMAN -o /oracle/app/oracle/product/12102/db1a16
/oracle/app/oracle/product/12102/db1a16/dbs PACMANDG]>srvctl config database -d PACMAN
Database unique name: PACMAN
Database name: PACMANDG
Oracle home: /oracle/app/oracle/product/12102/db1a16
Oracle user: oracle
Spfile: +DATA01_T2/PACMANdg/spfilePACMANdg.ora
Domain:
Start options: mount
Stop options: immediate
Database role: PHYSICAL_STANDBY
Management policy: AUTOMATIC
Database instance: PACMANDG
Disk Groups: DATA01_T2,ARCH01_T2
Services: PACMAN_SRV

10.   Restart using srvctl, start mrp and watch for FRA .

SELECT ARCH.THREAD# "Thread", ARCH.SEQUENCE# "Last Sequence Received", APPL.SEQUENCE# "Last Sequence Applied", (ARCH.SEQUENCE# - APPL.SEQUENCE#) "Difference"  
FROM (SELECT THREAD# ,SEQUENCE# FROM V$ARCHIVED_LOG WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#, MAX(FIRST_TIME) FROM V$ARCHIVED_LOG GROUP BY THREAD#)) 
ARCH,(SELECT THREAD# ,SEQUENCE# FROM V$LOG_HISTORY WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$LOG_HISTORY GROUP BY THREAD#)) APPL 
WHERE ARCH.THREAD# = APPL.THREAD# ORDER BY 1; 
    Thread Last Sequence Received Last Sequence Applied Difference
---------- ---------------------- --------------------- ----------
         1                  96179                 96130         49

It worked and standby started to caught up with primary.

Comments

Post a Comment