Oracle Data Guard 環境では V\$ARCHIVE_DEST_STATE ビューやV$MANAGED_STANDBY ビューで状態を確認します。本記事ではスタンバイ・インスタンス停止が発生したときにこれらのビューの内容がどのように変化するかを確認します。
正常な状態と設定
環境
本記事で使用する環境は以下の通りです。Oracle Database 19c (19.7) Enterprise Edition for Linux x86-64、Data Guard Broker は使っていません。
インスタンス名 | 説明 | 備考 |
---|---|---|
O19A | プライマリ・インスタンス | |
O19S | スタンバイ・インスタンス | Physical Standby, Realtime Apply |
関連する初期化パラメーター設定は以下の通りです。初期化パラメーター fal_server や log_archive_config 等も必要ですが省略しています。log_archive_dest_1 にはローカル保存設定、log_archive_dest_2 には Data Guard スタンバイ・インスタンスへの送信設定を行っています。
インスタンス | 初期化パラメータ | 設定 |
---|---|---|
O19A | log_archive_dest_1 | LOCATION=/u01/app/oracle/admin/O19A/archive VALID_FOR=(all_logfiles,all_roles) db_unique_name=O19A |
O19A | log_archive_dest_2 | SERVICE=O19S ASYNC VALID_FOR=(online_logfiles, primary_role) db_unique_name=O19S |
O19S | log_archive_dest_1 | LOCATION=/u01/app/oracle/admin/O19S/archive VALID_FOR=(all_logfiles, all_roles) db_unique_name=O19S |
O19S | log_archive_dest_2 | SERVICE=O19A ASYNC VALID_FOR=(online_logfiles, primary_role)db_unique_name=O19A |
正常な状態
正常に接続できている状態は以下の通りです。log_archive_dest の状態は MANAGED REAL TIME APPLY になっています。MRP プロセスはAPPLYING_LOG 状態です。
プライマリ・インスタンス
SQL> SELECT dest_name, status, recovery_mode FROM v$archive_dest_status WHERE dest_id IN (1, 2) ORDER BY 1;
DEST_NAME STATUS RECOVERY_MODE
------------------------------ --------- ----------------------------------
LOG_ARCHIVE_DEST_1 VALID IDLE
LOG_ARCHIVE_DEST_2 VALID MANAGED REAL TIME APPLY
スタンバイ・インスタンス
SQL> SELECT dest_name, status, recovery_mode FROM v$archive_dest_status WHERE dest_id IN (1, 2) ORDER BY 1;
DEST_NAME STATUS RECOVERY_MODE
------------------------------ --------- ----------------------------------
LOG_ARCHIVE_DEST_1 VALID MANAGED REAL TIME APPLY
LOG_ARCHIVE_DEST_2 VALID IDLE
SQL> SELECT status FROM v$managed_standby WHERE process LIKE 'MRP%';
STATUS
------------
APPLYING_LOG
スタンバイ停止
スタンバイ・インスタンスを異常終了させて、プライマリ・インスタンスの状態を確認します。
ALERTファイルの状態
alertファイルには接続が切れたことが直ちに出力されます。
2020-12-10T09:52:00.722941+09:00
Errors in file /u01/app/oracle/diag/rdbms/o19a/O19A/trace/O19A_tt02_31219.trc:
ORA-03135: connection lost contact
TT02 (PID:31219): Error 3135 for LNO:9 to 'O19S'
2020-12-10T09:52:00.724994+09:00
Errors in file /u01/app/oracle/diag/rdbms/o19a/O19A/trace/O19A_tt02_31219.trc:
ORA-03135: connection lost contact
2020-12-10T09:52:00.725242+09:00
Errors in file /u01/app/oracle/diag/rdbms/o19a/O19A/trace/O19A_tt02_31219.trc:
ORA-03135: connection lost contact
V$ARCHIVE_DEST_STATUSの状態
V$ARCHIVE_DEST_STATUS ビューは、STATUS 列が ERROR になりますが、RECOVERY_MODE 列は MANAGED REAL TIME APPLY のままです。プライマリ・インスタンスが再接続を試行してもこの状態は変わりません。
SQL> SELECT dest_name, status, recovery_mode FROM v$archive_dest_status WHERE dest_id IN (1, 2) ORDER BY 1;
DEST_NAME STATUS RECOVERY_MODE
------------------------------ --------- ----------------------------------
LOG_ARCHIVE_DEST_1 VALID IDLE
LOG_ARCHIVE_DEST_2 ERROR MANAGED REAL TIME APPLY
スタンバイ・インスタンスの起動
スタンバイ・インスタンスを MOUNT 状態で起動します(MANAGED STANDBY 設定は実施しません)。プライマリ・インスタンスの alert ログには接続が復活したことを示すメッセージが出力されます。
2020-12-10T09:58:05.244548+09:00
ALTER SYSTEM SET log_archive_dest_state_2='ENABLE' SCOPE=MEMORY SID='*';
2020-12-10T09:58:05.438798+09:00
TT04 (PID:41444): SRL selected for T-1.S-77 for LAD:2
プライマリ・インスタンスの V$ARCHIVE_DEST_STATE ビューのRECOVERY_MODE 列はこの時点で IDLE になります。STATUS 列は VALID に戻ります。
SQL> SELECT dest_name, status, recovery_mode FROM v$archive_dest_status WHERE dest_id IN (1, 2) ORDER BY 1;
DEST_NAME STATUS RECOVERY_MODE
------------------------------ --------- ----------------------------------
LOG_ARCHIVE_DEST_1 VALID IDLE
LOG_ARCHIVE_DEST_2 VALID IDLE
スタンバイ・インスタンスの V$ARCHIVE_DEST_STATE ビューはRECOVERY_MODE 列が IDLE です。
SQL> SELECT dest_name, status, recovery_mode FROM v$archive_dest_status WHERE dest_id IN (1, 2) ORDER BY 1;
DEST_NAME STATUS RECOVERY_MODE
------------------------------ --------- ----------------------------------
LOG_ARCHIVE_DEST_1 VALID IDLE
LOG_ARCHIVE_DEST_2 VALID IDLE
MANAGED STANDBY状態に移行
スタンバイ・インスタンスでMANAGED STANDBYを実行します。プライマリ・インスタンスのV$ARCHIVE_DEST_STATEビューのRECOVERY_MODE列はやや時間をおいてMANAGED REAL TIME APPLYになります。この変化があるときにはalertログには何も出力されません。
SQL> SELECT dest_name, status, recovery_mode FROM v$archive_dest_status WHERE dest_id IN (1, 2) ORDER BY 1;
DEST_NAME STATUS RECOVERY_MODE
------------------------------ --------- ----------------------------------
LOG_ARCHIVE_DEST_1 VALID IDLE
LOG_ARCHIVE_DEST_2 VALID MANAGED REAL TIME APPLY
スタンバイ・インスタンスでは log_archive_dest_1 の状態が MANAGED REAL TIME APPLY に変化します。
SQL> SELECT dest_name, status, recovery_mode FROM v$archive_dest_status WHERE dest_id IN (1, 2) ORDER BY 1;
DEST_NAME STATUS RECOVERY_MODE
------------------------------ --------- ----------------------------------
LOG_ARCHIVE_DEST_1 VALID MANAGED REAL TIME APPLY
LOG_ARCHIVE_DEST_2 VALID IDLE
SQL> SELECT status FROM v$managed_standby WHERE process LIKE 'MRP%';
STATUS
------------
APPLYING_LOG