LoginSignup
1
1

More than 3 years have passed since last update.

Oracle Data Guard環境で確認するビューとOracle Database 12c Release 2での変更

Last updated at Posted at 2017-09-01

Oracle Data Guard Physical Standbyを使ってスタンバイ・データベースを構築している場合、状態を確認するためにいくつかのビューを検索します。ここでは、確認すべきビューと、Oracle Database 12c Release 2 で変更された部分について説明しています。下記の例は、プライマリ・インスタンスの一意名をDB1、スタンバイ・インスタンスの一意名をDB1Rとしています。

プライマリー・インスタンスで確認すべき項目

V$DATABASE

基本的なデータベース設定を確認します。

SQL> SELECT LOG_MODE, PROTECTION_MODE, DATABASE_ROLE, FORCE_LOGGING FROM V$DATABASE;

LOG_MODE     PROTECTION_MODE      DATABASE_ROLE   FORCE_LOGGING
------------ -------------------- ---------------- ---------------------------------------
ARCHIVELOG   MAXIMUM PERFORMANCE  PRIMARY           YES

PROTECTION_MODE列はData Guardの保護モードを示します。多くの場合MAXIMUM PERFORMANCEになっているはずですが、保護モードをより強力に変更している場合には異なる場合があります。FORCE_LOGGING列はNOLOGGING属性を強制的に無効にする設定です。

V$ARCHIVED_LOG

Redoログからアーカイブ・ログを生成していることを確認します。また、同じSEQUENCE#列で、スタンバイ・インスタンスへ転送していることを確認します。
これはNAME列がスタンバイ向けの名前になっていることを確認します。

SQL> SELECT SEQUENCE#, NAME, STATUS FROM V$ARCHIVED_LOG ORDER BY 1;
...
 SEQUENCE# NAME                                                  STATUS
---------- ----------------------------------------------------- --------
       107 /u01/app/oracle/oradata/arch/1_107_947334793.dbf      A
       107 DB1R                                                  A
       108 /u01/app/oracle/oradata/arch/1_108_947334793.dbf      A
       108 DB1R                                                  A
       109 /u01/app/oracle/oradata/arch/1_109_947334793.dbf      A
       109 DB1R                                                  A

V$ARCHIVE_DEST_STATUS

Redoログ/アーカイブログの転送先として、log_archive_dest_N 初期化パラメーターの設定と、状態を確認します。Redoログ転送によるReal Time Applyを行う場合は、RECOVERY_MODE列がMANAGED REAL TIME APPLYになっているはずです。MANAGEDになっている場合はReal Time Apply状態になっていません。

SQL> SELECT RECOVERY_MODE FROM V$ARCHIVE_DEST_STATUS WHERE DEST_NAME='LOG_ARCHIVE_DEST_2';

RECOVERY_MODE
-----------------------
MANAGED REAL TIME APPLY

スタンバイ・インスタンスで確認すべき項目

V$MANAGED_STANDBY

リカバリーを行うMRP0プロセスの状態を確認します。 STATUS列がAPPLY_LOGになっていれば受信したRedoログを適用中です。

SQL> SELECT PROCESS, PID, STATUS FROM V$MANAGED_STANDBY WHERE PROCESS='MRP0';
PROCESS   PID                      STATUS
--------- ------------------------ ------------
MRP0      34281                    APPLYING_LOG

V$ARCHIVED_LOG

受信したRedoログからアーカイブ・ログを生成していることを確認します。SEQUENCE#列がプライマリ・インスタンスと同じになっているか確認してください。

SQL> SELECT SEQUENCE#, NAME, STATUS FROM V$ARCHIVED_LOG ORDER BY 1;
...
 SEQUENCE# NAME                                                  STATUS
---------- ----------------------------------------------------- --------
       107 /u01/app/oracle/oradata/arch/db1r/1_107_947334793.dbf A
       108 /u01/app/oracle/oradata/arch/db1r/1_108_947334793.dbf A
       109 /u01/app/oracle/oradata/arch/db1r/1_109_947334793.dbf A

V$ARCHIVE_GAP

アーカイブログの受信ギャップを確認します。正常状態ではこのビューからはレコードは検索されません。

SQL> SELECT COUNT(*) FROM V$ARCHIVE_GAP;
  COUNT(*)
----------
         0

Oracle Database 12c Release 2 による変更

Oracle Database 12c Release 2 ではV\$MANAGED_STANDBYビューは非推奨になりました。代わりにV$DATAGUARD_PROCESSビューを使います。ただしこの二つのビューは内容が微妙に異なります。

列名の対比

V$MANAGED_STANDBY V$DATAGUARD_PROCESS
PROCESS NAME
PID PID
- TYPE
- ROLE
- PROC_TIME
- TASK_TIME
- TASK_DONE
STATUS ACTION
CLIENT_PROCESS CLIENT_ROLE
CLIENT_PID CLIENT_PID
CLIENT_DBID -
GROUP# GROUP#
RESETLOG_ID RESETLOG_ID
THREAD# THREAD#
SEQUENCE# SEQUENCE#
BLOCK# BLOCK#
BLOCKS BLOCK_COUNT
DELAY_MINS DELAY_MINS
- DEST_ID
- DEST_MASK
- DBID
- DGID
- STOP_STATE
KNOWN_AGENTS -
ACTIVE_AGENTS -
CON_ID CON_ID

出力されるプロセス名の対比

各ビューに出力されるプロセス名も異なります。V$DATAGUARD_PROCESSには出力されるレコード数が増えています。

V$MANAGED_STANDBY.PROCESS V$DATAGUARD_PROCESS.NAME
- LGWR
- TMON
ARCH ARC0
DGRD TT00
DGRD TT01
ARCH ARC1
ARCH ARC2
ARCH ARC3
RFS rfs
MRP0 MRP0

ステータス列の対比

Redo適用状態になっている場合、V\$MANAGED_STANDBYビューのSTATUS列はAPPLYING_LOGになっていますが、V$DATAGUARD_PROCESSビューでは検索時点のステータスを出力するため通常はIDLEになっています。

SQL> SELECT process, pid, status FROM V$MANAGED_STANDBY WHERE process='MRP0';

PROCESS   PID                   STATUS
--------- --------------------- ------------
MRP0      8541                  APPLYING_LOG

SQL> SELECT name, pid, action FROM V$DATAGUARD_PROCESS WHERE name='MRP0';

NAME  PID                      ACTION
----- ------------------------ ------------
MRP0  8541                     IDLE
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1