Data Guard 環境のアーカイブログ
Data Guard はプライマリ・データベースで発生した更新情報(REDOログ)をスタンバイ・データベースに自動転送して適用することでデータベースの同期をとる技術です。REDOログはREDOログ・ファイルに出力され、アーカイブログ・ファイルとして出力されます。REDOログ・ファイルのコピーであるアーカイブログは、プライマリ・データベースだけでなく、スタンバイ・データベース上でも作成されます。
本記事ではアーカイブログの出力状況を確認できる V$ARCHIVED_LOG ビューの内容が Data Guard 環境でどのように変化するのかを検証します。カスケード構成では動作が異なる場合があります。
本記事ではプライマリ・データベースの名前(db_unique_name)を O19P、スタンバイ・データベースの名前を O19S としています。
管理スタンバイ実行時
Data Guard が正常に動作している場合、アーカイブログはプライマリ・データベース、スタンバイ・データベース両方に出力されます。
V$ARCHIVED_LOG ビューの主な列のうち、プライマリ・データベースとスタンバイ・データベース共通の項目は以下の通りです。
列名 | 値の説明 | 備考 |
---|---|---|
DEST_ID | 転送した log_archive_dest_N の番号 | |
THREAD# | アーカイブログが出力されたインスタンス番号 | 非RAC環境では1 |
SEQUENCE# | アーカイブログのシーケンス番号 | |
COMPLETION_TIME | アーカイブログ作成・転送完了日時 |
プライマリ・データベース
プライマリ・データベースの V$ARCHIVED_LOG ビューには、単一のシーケンス番号(SEQUENCE# 列)に対して、ローカル環境(プライマリ・データベース)に出力されたアーカイブログとリモート環境(スタンバイ・データベース)に転送されたアーカイブログの両方の情報が出力されます。
列名 | 値の説明 | 備考 |
---|---|---|
NAME | ファイル名または転送したアーカイブのリモート・サービス名 | |
STANDBY_DEST | リモート転送の場合はYES、ローカル保存時 NO | |
ARCHIVED | アーカイブされた場合はYES | |
APPLIED | 転送済アーカイブログがスタンバイに適用済の場合YES | |
STATUS | 使用可能な場合 A | |
CREATOR | ローカル出力の場合 ARCH、リモート転送の場合 LGWR | |
REGISTRAR | ローカル出力の場合 FGRD、リモート転送の場合 LGWR |
下記の例ではシーケンス番号 145 のアーカイブログが出力された状況を示しています。NAME列にO19S が出力されたレコードはスタンバイ・データベースに転送されたアーカイブログを示しています。APPLIED列がYESのため、スタンバイ・データベースに適用済であることを示します。
SQL> SELECT name, archived, status, applied FROM v$archived_log WHERE sequence#=145;
NAME ARC S APPLIED
---------------------------------------------------------------------- --- - ---------
/u01/app/oracle/admin/O19P/archive/1_145_1092062913.dbf YES A NO
O19S YES A YES
スタンバイ・データベース
スタンバイ・データベースの V$ARCHIVED_LOG ビューには、リモート転送されたアーカイブログの状況は出力されません。
列名 | 値の説明 | 備考 |
---|---|---|
NAME | ファイル名 | |
STANDBY_DEST | ローカル保存なので NO | |
ARCHIVED | アーカイブされた場合は YES | |
APPLIED | スタンバイに適用済の場合 YES | |
STATUS | 使用可能な場合 A | |
CREATOR | ローカル出力なので ARCH | |
REGISTRAR | リモートからの転送なので RFS |
SQL> SELECT status FROM v$managed_standby WHERE process LIKE 'MRP%';
STATUS
------------
APPLYING_LOG
APPLIED 列が YES であるためスタンバイ・データベースに適用済であることがわかります。
SQL> SELECT name, archived, status, applied FROM v$archived_log WHERE sequence#=145;
NAME ARC S APPLIED
---------------------------------------------------------------------- --- - ---------
/u01/app/oracle/admin/O19S/archive/1_145_1092062913.dbf YES A YES
スタンバイ停止時
スタンバイ・データベースを停止した場合にプライマリ・データベースでアーカイブログが出力された場合の動作を検証します。
プライマリ・データベース
プライマリ・データベースの V$ARCHIVED_LOG ビューにはスタンバイ・データベースに転送するはずのアーカイブログの情報は出力されません。
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
システムが変更されました。
SQL> SELECT MAX(sequence#) FROM v$archived_log;
MAX(SEQUENCE#)
--------------
146
SQL> SELECT name, archived, status, applied FROM v$archived_log WHERE sequence#=146;
NAME ARC S APPLIED
---------------------------------------------------------------------- --- - ---------
/u01/app/oracle/admin/O19P/archive/1_146_1092062913.dbf YES A NO
スタンバイ起動時
スタンバイ・インスタンスが起動し、管理リカバリモード(MANAGED STANDBY)が実行されていない場合の動作を検証します。この場合でもスタンバイ・インスタンスではリアルタイム適用のためのREDO ログやアーカイブログは受信されています。
プライマリ・データベース
スタンバイ・インスタンスは起動しているため、V$ARCHIVED_LOG ビューにはリモート転送されたアーカイブログの情報が出力されています。しかし APPLIED 列の値は NO であり、適用はされていないことがわかります。
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
システムが変更されました。
SQL> SELECT MAX(sequence#) FROM v$archived_log;
MAX(SEQUENCE#)
--------------
147
SQL> SELECT name, archived, status, applied FROM v$archived_log WHERE sequence#=147;
NAME ARC S APPLIED
---------------------------------------------------------------------- --- - ---------
/u01/app/oracle/admin/O19P/archive/1_147_1092062913.dbf YES A NO
O19S YES A NO
スタンバイ・データベース
スタンバイ・インスタンスでもアーカイブログが出力されています。しかし APPLIED 列は NO であり、適用はされていないことがわかります。
SQL> SELECT name, archived, status, applied FROM v$archived_log WHERE sequence#=147;
NAME ARC S APPLIED
---------------------------------------------------------------------- --- - ---------
/u01/app/oracle/admin/O19S/archive/1_147_1092062913.dbf YES A NO
アーカイブログ削除対象設定
RMAN から削除されたアーカイブログの情報は NAME 列が NULL になり、DELETED 列が YES になります。V$ARCHIVED_LOG ビューの保存期間は初期化パラメーター control_file_record_keep_time(デフォルト値 7)で指定された日数になります。
SQL> SET NULL NULL
SQL> SELECT DISTINCT name, deleted FROM v$archived_log WHERE name IS NULL;
NAME DEL
---------------------------------------------------------------------- ---
NULL YES
RMAN でアーカイブログを削除可能とみなすための条件は CONFIGURE コマンドで指定します。この設定は Data Guard のプライマリ・データベースとスタンバイ・データベースで別々の値に指定できます。削除ポリシーは ARCHIVELOG DELETION POLICY 属性で変更できます。
RMAN> SHOW ARCHIVELOG DELETION POLICY;
db_unique_name O19PのデータベースにおけるRMAN構成パラメータ:
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
スタンバイ・データベースに「適用済」であるアーカイブログを削除う可能とみなす設定は ARCHIVELOG DELETION POLICY を APPLIED ON ALL STANDBY に指定します。
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;
新しいRMAN構成パラメータ:
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;
新しいRMAN構成パラメータが格納できました
スタンバイ・データベースに「転送済」であるアーカイブログを削除う可能とみなす設定は ARCHIVELOG DELETION POLICY を SHIPPED TO ALL STANDBY に指定します。
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO SHIPPED TO ALL STANDBY;
新しいRMAN構成パラメータ:
CONFIGURE ARCHIVELOG DELETION POLICY TO SHIPPED TO ALL STANDBY;
新しいRMAN構成パラメータが格納できました
「Oracle Database バックアップおよびリカバリ・リファレンス」マニュアル には ALL を省略する構文が記載されていますが、不具合のため省略できません。値は保存されますが RMAN-08591 エラーが発生します。
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO SHIPPED TO STANDBY;
新しいRMAN構成パラメータ:
CONFIGURE ARCHIVELOG DELETION POLICY TO SHIPPED TO STANDBY;
新しいRMAN構成パラメータが格納できました
RMAN-08591: 警告: アーカイブ・ログ削除ポリシーが無効です
Author: Noriyoshi Shinoda / Date: February 22, 2024