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