0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Data Guardでスタンバイ停止時の状態を確認する(Oracle Database 19c)

Last updated at Posted at 2020-12-10

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
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?