Monday, July 25, 2016

Verify the log shipping from Primary to Standby

========================================================================
Run below queries on both Primary and Standby:

Example result on Primary:

SQL> select thread#,max(sequence#) from v$archived_log group by thread#;

   THREAD# MAX(SEQUENCE#)
---------- --------------
         1           1030
         2           1976
         3            992

========================================================================

SQL> select process,status,sequence# from v$managed_standby;

PROCESS   STATUS        SEQUENCE#
--------- ------------ ----------
ARCH      CLOSING            1030
ARCH      CLOSING            1007
ARCH      CLOSING            1028
ARCH      CLOSING            1029
LNS       WRITING            1031

Example result on Standby:

SQL> select thread#,max(sequence#) from v$archived_log where applied='YES' group by thread#;

   THREAD# MAX(SEQUENCE#)
---------- --------------
         1           1016
         2           1969
         3            986

SQL> select process,status,sequence# from v$managed_standby;

PROCESS   STATUS        SEQUENCE#
--------- ------------ ----------
ARCH      CONNECTED             0
ARCH      CONNECTED             0
ARCH      CONNECTED             0
ARCH      CONNECTED             0
RFS       IDLE                  0
RFS       IDLE                  0
RFS       IDLE                  0
MRP0      APPLYING_LOG       1971


========================================================================
 Current shipping log a Standby

========================================================================

To Identify real gap between Primary & Standby use below query on Standby:

SQL> 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                   3936                  3936          0
         2                   4127                  4127          0
         3                   4089                  4088          1

========================================================================
To Identify where the SYNC stuck, use below query on Standby:

SQL> set lines 400
SQL> select sequence#,process,pid,status,client_process,block#, active_agents, known_agents,BLOCKS FROM gv$managed_standby ORDER BY thread#, pid;

 SEQUENCE# PROCESS          PID STATUS       CLIENT_P     BLOCK# ACTIVE_AGENTS KNOWN_AGENTS     BLOCKS
---------- --------- ---------- ------------ -------- ---------- ------------- ------------ ----------
         0 ARCH           12301 CONNECTED    ARCH              0             0            0          0
         0 ARCH           12303 CONNECTED    ARCH              0             0            0          0
         0 ARCH           12306 CONNECTED    ARCH              0             0            0          0
         0 ARCH           12308 CONNECTED    ARCH              0             0            0          0
         0 RFS            63255 IDLE         ARCH              0             0            0          0
         0 RFS            64122 IDLE         ARCH              0             0            0          0
         0 RFS            94905 IDLE         ARCH              0             0            0          0
         0 RFS            95539 IDLE         UNKNOWN           0             0            0          0
         0 ARCH           98551 CONNECTED    ARCH              0             0            0          0
         0 ARCH           98553 CONNECTED    ARCH              0             0            0          0
         0 ARCH           98555 CONNECTED    ARCH              0             0            0          0
         0 ARCH           98557 CONNECTED    ARCH              0             0            0          0
         0 ARCH          107778 CONNECTED    ARCH              0             0            0          0
         0 ARCH          107780 CONNECTED    ARCH              0             0            0          0
         0 ARCH          107782 CONNECTED    ARCH              0             0            0          0
         0 ARCH          107784 CONNECTED    ARCH              0             0            0          0
         0 RFS           110810 IDLE         UNKNOWN           0             0            0          0
         0 RFS           111166 IDLE         UNKNOWN           0             0            0          0
         0 RFS           115561 IDLE         UNKNOWN           0             0            0          0
         0 RFS           125704 IDLE         UNKNOWN           0             0            0          0
      3937 RFS           110816 IDLE         LGWR         589311             0            0          2
      4128 MRP0           45057 WAIT_FOR_LOG N/A               0            73           73          0
      4128 RFS           110765 IDLE         LGWR         423411             0            0          1
      4090 RFS           115558 IDLE         LGWR         606837             0            0          1

24 rows selected.

Additional queries:
========================================================================

select DEST_ID,DEST_NAME,DESTINATION,TARGET,STATUS,ERROR from v$archive_dest where dest_id < 5;

select to_char(timestamp, 'dd-mon-yyyy, hh:mm'), message from v$dataguard_status;

We can also notice the log application from ALERT_LOG from Standby

$ cd /instance_name/u01/diag/rdbms/trace
$ tail -f alert*.log

No comments:

Post a Comment