DBAtlas · データベース運用アトラス

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';
DBAtlas で開く →