Oracle Data Guard (フィジカルスタンバイ) の構築
症状
目標: フィジカルスタンバイ (Data Guard) で Oracle の災害復旧と高可用性を構築し、プライマリ障害時にスタンバイへ切り替えられるようにする。
1. プライマリを FORCE LOGGING と ARCHIVELOG モードにする
スタンバイがプライマリと一貫性を保つには、すべての変更が redo に書き込まれる必要がある。FORCE LOGGING は NOLOGGING 操作もログに記録する。ARCHIVELOG モードにするにはデータベースを MOUNT 状態で起動する。
Oracle
ALTER DATABASE FORCE LOGGING;
-- For ARCHIVELOG:
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;2. スタンバイ REDO ログファイルを追加する
スタンバイ REDO ログ (SRL) はオンライン REDO ログより 1 グループ多く、同じサイズにする。プライマリとスタンバイの両方に作成し、リアルタイム適用に必要である。例では、オンライン REDO が 200M なら SRL も 200M とする。
Oracle
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/oradata/srl01.log') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/oradata/srl02.log') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/oradata/srl03.log') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/oradata/srl04.log') SIZE 200M;3. log_archive_dest と関連パラメータを設定する
プライマリで、redo をスタンバイに転送する dest_2 を定義する。DB_UNIQUE_NAME、LOG_ARCHIVE_CONFIG (両側の db_unique_name)、FAL_SERVER、STANDBY_FILE_MANAGEMENT=AUTO を設定する。これによりスタンバイ上でファイルが自動的に作成される。
Oracle
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl_prim,orcl_stby)';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=orcl_stby ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl_stby';
ALTER SYSTEM SET FAL_SERVER='orcl_stby'; -- for role changes; on the standby FAL_SERVER='orcl_prim'
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;4. RMAN DUPLICATE FOR STANDBY でスタンバイを作成する
スタンバイサーバーでパスワードファイルと静的リスナー/tnsnames を設定した後、RMAN でプライマリとスタンバイ (AUXILIARY) に接続する。FROM ACTIVE DATABASE はバックアップなしでネットワーク経由でコピーし、DORECOVER は redo を適用する。
Oracle
rman TARGET sys/password@orcl_prim AUXILIARY sys/password@orcl_stby
RUN {
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE
DORECOVER
NOFILENAMECHECK;
}5. REDO 適用 (MRP) を開始して検証する
スタンバイが MOUNT 状態のときに管理リカバリを開始する。リアルタイム適用には USING CURRENT LOGFILE を使う。v$managed_standby で適用プロセス (MRP0) が実行中であることを確認する。
Oracle
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
SELECT process, status, sequence# FROM v$managed_standby WHERE process LIKE 'MRP%';6. Data Guard Broker を有効にする
ブローカーは構成を一元化し、フェイルオーバー/スイッチオーバーを単一のコマンドにする。両方のインスタンスで DG_BROKER_START=TRUE を設定し、dgmgrl で構成を作成して有効にする。12c+ ではブローカーが redo 転送を管理する: LOG_ARCHIVE_DEST_2 を手動で設定していると ADD DATABASE は ORA-16698 で失敗するため、先に ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='' でクリアする。
Oracle
ALTER SYSTEM SET DG_BROKER_START=TRUE;
-- In dgmgrl:
CREATE CONFIGURATION dgconf AS PRIMARY DATABASE IS orcl_prim CONNECT IDENTIFIER IS orcl_prim;
ADD DATABASE orcl_stby AS CONNECT IDENTIFIER IS orcl_stby;
ENABLE CONFIGURATION;7. 同期の差を監視し、テストを完了する
プライマリとスタンバイ間のシーケンスの差は継続的に監視する必要がある。差の拡大はネットワーク/適用のボトルネックを示す。dgmgrl の SHOW CONFIGURATION は 'SUCCESS' を示すべきである。必要に応じてスイッチオーバーでロール変更をテストする。
Oracle
-- dgmgrl (SHOW DATABASE shows the Transport Lag / Apply Lag values):
SHOW CONFIGURATION;
SHOW DATABASE orcl_stby;
-- SQL (standby): SELECT name, value FROM v$dataguard_stats WHERE name LIKE '%lag';