Skip to main content

ORACLE DATA GUARD COMMANDS

Hey Guys!! I have provided some important and useful commands that is used during monitoring and troubleshooting Oracle Data Guard related Issues. PFB.

TO CHECK THE STATUS OF THE DATABASE - PRIMARY AND STANDBY:

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

SET LINESIZE 189 PAGES 2000
COL NAME FOR A10
COL HOST_NAME FOR A30

SELECT NAME, INSTANCE_NAME, DB_UNIQUE_NAME, HOST_NAME, STATUS, OPEN_MODE, DATABASE_ROLE AS DB_ROLE, LOGINS FROM V$DATABASE, GV$INSTANCE;


TO CHECK STANDBY INFO :

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

SET LINESIZE 189 PAGES 2000
COL NAME FOR A10
COL HOST_NAME FOR A20
COL DB_UNIQUE_NAME FOR A20
COL OPEN_MODE FOR A10
COL DG_BROKER FOR A15

SELECT NAME, DB_UNIQUE_NAME, HOST_NAME, DATABASE_ROLE AS DB_ROLE, OPEN_MODE, PROTECTION_MODE AS PROTECT_MODE, PROTECTION_LEVEL AS PROTECT_LEVEL, DATAGUARD_BROKER AS DG_BROKER, SWITCHOVER_STATUS FROM V$DATABASE, GV$INSTANCE;


TO CHECK CURRENT DG CONFIGURATION :
===================================

SHOW PARAMETER LOG_ARCHIVE_CONFIG;

SHOW PARAMETER LOG_ARCHIVE_DEST_2;

ARCHIVE LOG LIST;

SHOW PARAMETER RECO;


TO FIND CURRENT_SCN IN PRIMARY :
================================

SET LINESIZE 189 PAGES 2000
COL CURRENT_SCN FOR 99999999999999

SELECT A.NAME AS DB_NAME, B.DB_UNIQUE_NAME, B.PARENT_DBUN, A.OPEN_MODE, B.DEST_ROLE, B.CURRENT_SCN FROM GV$DATAGUARD_CONFIG B, V$DATABASE A WHERE DEST_ROLE LIKE '%PRIMARY%';


TO FIND CURRENT_SCN IN STANDBY :
================================

SET LINESIZE 189 PAGES 2000
COL CURRENT_SCN FOR 99999999999999

SELECT A.NAME AS DB_NAME, B.DB_UNIQUE_NAME, B.PARENT_DBUN, A.OPEN_MODE, B.DEST_ROLE, B.CURRENT_SCN FROM GV$DATAGUARD_CONFIG B, V$DATABASE A WHERE DEST_ROLE NOT LIKE '%PRIMARY%';


TO CHECK SEQUENCE RECEIVED/APPLIED ON ALL INSTANCES AND THE GAP
=================================================================

SELECT A.THREAD#, MAX(A.SEQUENCE#) LAST_SEQ_RECVD, MAX(B.SEQUENCE#) LAST_SEQ_APPLD, MAX(A.SEQUENCE#) - MAX(B.SEQUENCE#) GAP FROM V$ARCHIVED_LOG A, V$LOG_HISTORY B WHERE A.THREAD# = B.THREAD# GROUP BY A.THREAD#;


TO CHECK LAST_APPLIED_TIMESTAMP IN STANDBY :=============================================

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';

SELECT A.THREAD#, B.LAST_SEQ, A.APPLIED_SEQ, A.LAST_APP_TIMESTAMP, B.LAST_SEQ - A.APPLIED_SEQ ARC_DIFF FROM ( SELECT THREAD#, MAX (SEQUENCE#) APPLIED_SEQ, MAX (NEXT_TIME) LAST_APP_TIMESTAMP FROM GV$ARCHIVED_LOG WHERE APPLIED = 'YES' GROUP BY THREAD#) A, ( SELECT THREAD#, MAX (SEQUENCE#) LAST_SEQ FROM GV$ARCHIVED_LOG GROUP BY THREAD#) B WHERE A.THREAD# = B.THREAD#;


TO CHECK IF THERE IS ANY ERROR REPORTED DURING LOG SHIPPING AND LOG APPLYING :=========================================================================

SET LINESIZE 189 PAGES 2000
COL INSTANCE_NAME FOR A15
COL DESTINATION FOR A50
COL ERROR FOR A40

SELECT A.INST_ID, B.INSTANCE_NAME,  A.DEST_ID, A.PROCESS, A.STATUS, A.DESTINATION, A.ERROR FROM GV$ARCHIVE_DEST A, GV$INSTANCE B WHERE A.STATUS NOT IN ('INACTIVE');


TO CHECK THE MOST RECENT SEQUENCE# AND THEIR STATUS (STANDBY) :===============================================================

SET LINESIZE 189 PAGES 2000
COL DB_NAME FOR A10
COL ARC_NAME FOR A70

SELECT B.NAME AS DB_NAME, B.DATABASE_ROLE AS DB_ROLE, A.NAME AS ARC_NAME, A.THREAD# , A.SEQUENCE#, A.APPLIED  FROM V$ARCHIVED_LOG A , V$DATABASE B ORDER BY SEQUENCE# DESC
FETCH FIRST 10 ROWS ONLY
/

TIP : CHECK IF ARCHIVES ARE PROPERLY SHIPPED AND APPLIED ONTO STANDBY BY COMPARING THE SEQUENCE# ON BOTH PRIMARY AND STANDBY. CHECK ALERT LOG AND TAKE ACTION ACCORDINGLY.


Comments

Popular posts from this blog

ORA-27046: file size is not a multiple of logical block size and SP2-0714: invalid combination of STARTUP options

My DB Configuration : Proddb : Source GoldenGate Database Testdb : Target GoldenGate Database DB Backups : None SPFILE/PFILE Backup : None What Happened: The SPFILE in the source database (Proddb) got corrupted. I attempted to increase sga_max_size and streams_pool_size . After making these changes and issuing a STARTUP FORCE command to bounce the database, my Proddb (source) database failed to start. Unfortunately, there were no backups of the database, SPFILE, or PFILE. Solution (What I Did): Since the target server (Testdb) had valid parameter values and was similar to Proddb: I generated a PFILE from the SPFILE on the Testdb server. Transferred the PFILE to the Proddb server. Edited the PFILE with proddb values and Started the Proddb database using the PFILE. Created a new SPFILE from the PFILE. Shut down the database and started it again using the newly created SPFILE. The database is now up and running with the newly created SPFILE. STEPS AND COMMANDS USED :  Source Server ...
HOW TO START A SINGLE INSTANCE OR ALL NODES OF A RAC DATABASE ? DEFINITION: IN RAC (REAL APPLICATION CLUSTERS), INSTEAD OF THE USUAL SETUP WITH ONE INSTANCE AND ONE DATABASE, WE HAVE MULTIPLE INSTANCES CONNECTING TO A SINGLE DATABASE. USAGE: LOAD BALANCING, HIGH AVAILABILITY ASSUMPTION : ASM AND CRS SERVICES ARE ALREADY UP AND RUNNING 1). STARTING ONLY ONE INSTANCE OF A RAC DATABASE SCENARIO :  ASM and CRS SERVICES ARE UP, DATABASE AND INSTANCES ARE DOWN               su - grid (or) su - root               cd $GRID_HOME/bin               ./crsctl check crs                    su - oracle                   srvctl status database -d db_name               srvctl start instance -d db_name -i instance_name     ...