Info2softは、ウェブサイトでより快適で適切な閲覧体験を提供するためにCookieを使用しています。 プライバシーポリシー
Loading...
Oracle Data GuardはOracle標準搭載の高可用性(HA)・災害復旧ソリューションです。データベースに対するすべての変更記録であるREDOデータを継続的に転送・適用することで、1台または複数のスタンバイデータベースをプライマリ(本番)データベースと同期させます。
ハードウェア障害、人為的ミス、サイト全体の災害などでプライマリデータベースが停止した場合、Data Guardはスタンバイデータベースを昇格させて業務を引き継ぎ、停止時間とデータ損失を最小限に抑えます。
スタンバイデータベースの種類
Data Guardは3種類のスタンバイをサポートしています。適切な種類の選択は復旧目標とスタンバイの活用用途に基づきます。
| スタンバイ種別 | 動作原理 | 適した用途 |
|---|---|---|
| 物理スタンバイ | REDOデータをブロック単位で直接適用し、プライマリと完全に同一のバイト単位コピーを作成 | 災害復旧・HAフェイルオーバー |
| 論理スタンバイ | REDOデータをSQL文に変換して適用。スタンバイを読み取り専用で起動可能、スキーマ構成をプライマリと異なる設定にできる | レポート作成・オンラインマイグレーション |
| スナップショットスタンバイ | 物理スタンバイを一時的に書き込み可能なコピーに変換。REDOデータは受信するが、元の状態に戻すまで適用しない | 実本番データを利用した開発・検証 |
各種コマンドを実行する前に環境を適切に準備する必要があります。これらの事前準備の不備はData Guard構成失敗の最も多い原因の一つです。
プライマリサーバーとスタンバイサーバーの環境は可能な限り統一する必要があります。OSバージョンやパッチレベルの差異はREDO適用時に予期せぬエラーを引き起こします。
prod_pri、prod_stdby)構成作業を開始する前に、プライマリデータベースで以下の初期化パラメータが正しく設定されているか確認します。
Data Guardの構築には定められた手順が存在します。まずプライマリデータベースを設定し、REDOデータを生成しスタンバイへ送信できる状態に準備します。
プライマリデータベースをARCHIVELOGモードで起動し、REDOデータを保存してスタンバイへ転送できるようにします。またFORCE LOGGINGを有効化し、ダイレクトロードなどの操作がREDOログに記録されずスタンバイとの同期が崩れる事態を防ぎます。
プライマリデータベース – SQL*Plus
-- ARCHIVELOGモードへ切り替え
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE FORCE LOGGING;
ALTER DATABASE OPEN;
-- 設定確認
SELECT log_mode, force_logging FROM v$database;

スタンバイREDOログ(SRL)はプライマリから受信したREDOデータを格納します。リアルタイム適用機能に必須で、アーカイブログの完全な転送を待たず、ログ受信と同時にスタンバイへ変更を反映可能にします。
推奨設定:オンラインREDOロググループの数より1つ多いSRLグループを同一サイズで作成。オンラインログが3グループの場合はSRLを4グループ作成します。
プライマリデータベース – SQL*Plus
ALTER DATABASE ADD STANDBY LOGFILE
GROUP 4 ('/u01/app/oracle/oradata/srl04.log') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE
GROUP 5 ('/u01/app/oracle/oradata/srl05.log') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE
GROUP 6 ('/u01/app/oracle/oradata/srl06.log') SIZE 200M;
プライマリとスタンバイのデータベースはOracle Net Services経由で通信します。tnsnames.oraとlistener.oraの2ファイルを設定する必要があります。
tnsnames.oraの更新
両サーバーに2つのデータベースの接続定義を追記します。これにより相互にネットワーク上で相手先を解決できるようになります。
プライマリ・スタンバイサーバー共通 – tnsnames.ora
PRIMARY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = pri_server_ip)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = primary_db_service)
)
)
STANDBY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = stdby_server_ip)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = standby_db_service)
)
)
リスナー設定
スタンバイ側のlistener.oraに静的リスナー定義を記述する必要があります。スタンバイ作成初期はNOMOUNTまたはMOUNT状態で起動するため、動的登録が機能しません。静的定義がないとリスナーがサービスを認識できず、プライマリから接続できなくなります。
スタンバイサーバー – listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = standby_db_service)
(ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
(SID_NAME = standby_sid)
)
)
通信疎通確認
両ファイルの更新後、リスナーをリロード(lsnrctl reload)し、プライマリサーバーから疎通テストを実行します。
プライマリサーバー – シェル
tnsping standby
スタンバイを初期化するにはプライマリデータベースの整合性の取れた複製データが必要です。標準ツールであるRMAN(リカバリマネージャー)を使用し、データファイルとスタンバイ同期に必要なアーカイブログをまとめて取得します。
プライマリデータベース – RMAN
RMAN TARGET /
BACKUP DATABASE PLUS ARCHIVELOG;
スタンバイサーバーにバックアップファイルを配置したらデータベースをリストアします。プライマリからコピーしたパラメータファイルを使用しスタンバイインスタンスをNOMOUNTモードで起動後、RMANでリストアを実行しスタンバイとしてマウントします。
スタンバイデータベース – SQL*Plus
STARTUP NOMOUNT;
スタンバイデータベース – RMAN
RMAN TARGET /
-- まず制御ファイルをリストア
RESTORE CONTROLFILE FROM '/path/to/backup/controlfile_auto';
-- データファイルをリストア
RESTORE DATABASE;
-- スタンバイとしてマウント
ALTER DATABASE MOUNT STANDBY DATABASE;
STANDBY DATABASEとしてマウントすることで、このインスタンスが自身のトランザクションを生成せず、REDOログを受信・適用する役割であることをOracleに通知します。
スタンバイのマウント完了後、プライマリ側にREDOデータの送信先を定義します。プライマリデータベースのログ転送サービスパラメータで設定を行います。
核心パラメータはLOG_ARCHIVE_DEST_2で、スタンバイの送信先と転送方式を定義します。
プライマリデータベース – SQL*Plus
-- Data Guard構成にプライマリ・スタンバイを登録
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(primary_db_unique_name,standby_db_unique_name)';
-- リモートアーカイブ先を定義
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2=
'SERVICE=standby ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby_db_unique_name';
-- 送信先を有効化
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;
ASYNC(非同期)転送を使用することで、ネットワーク遅延時にプライマリデータベースのパフォーマンスへの影響を回避します。VALID_FOR属性はこの送信先をプライマリ役割時のみに限定し、データベースがスタンバイに切り替わった際に適用されないよう制御します。
最後の手順としてスタンバイ側でREDO適用を起動します。バックグラウンドプロセスが起動し、プライマリから継続的にREDOデータを受信しスタンバイのデータファイルに反映します。
スタンバイデータベース – SQL*Plus
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
USING CURRENT LOGFILE DISCONNECT;
USING CURRENT LOGFILEはリアルタイム適用を有効化し、アーカイブログの完全転送を待たず、スタンバイREDOログに到着した変更を即時反映します。DISCONNECTはプロセスをバックグラウンドで実行し、SQL*Plusセッションを解放します。
v$managed_standbyを照会し、APPLYING_LOGステータスが表示されているか確認します。Oracle Data GuardはOracleのHA基盤を提供しますが、複製状況の監視、フェイルオーバースクリプトの運用、スタンバイ同期維持など、継続的な手動管理が必要です。
インフラ全体に対してより広範かつ自動化された高可用性を求める企業には、i2Availabilityが補完的な保護レイヤーを提供します。
金融、医療、官公庁など厳しい運用環境でOracleを運用する組織にとって、i2Availabilityはデータベース層を超え、アプリケーションスタック全体をカバーするHA戦略を拡張します。
Data Guardの大半のエラーはネットワーク設定または初期化パラメータの細かい見落としが原因です。代表的な不具合と解決策を記載します。
アラートログにORA-12154またはORA-12514が出力される場合はtnsnames.oraの誤記、リスナー停止、1521ポート遮断のいずれかが原因です。tnsping standbyで疎通を確認し、両サーバーのリモートログインパスワードファイル(orapwd)が一致しているか確認してください。
REDOログは到着しているのにスタンバイの同期が遅れる場合、適用プロセスが起動していない、またはログシーケンスに欠損が存在する可能性があります。V$MANAGED_STANDBYを照会し適用状況を確認、V$ARCHIVE_GAPで欠損シーケンスを特定し手動登録します。
ARCHIVELOGモードが無効だと転送するREDOデータが生成されません。FORCE LOGGINGが無効だとNOLOGGING操作が記録されず、スタンバイに復旧不可能なブロックが発生します。構成開始前に以下のSQLで両設定を検証します。
SELECT log_mode, force_logging FROM v$database;
サーバー間のディレクトリ構成が異なる場合、スタンバイ側のSPFILEにDB_FILE_NAME_CONVERTとLOG_FILE_NAME_CONVERTを設定する必要があります。これらのパラメータがないとプライマリとスタンバイのファイルパスが不一致の際にリストアが失敗します。
Q1:Oracle Data Guardにおけるスイッチオーバーとフェイルオーバーの違いは?
スイッチオーバーは計画的な役割切り替えで、処理中もプライマリ・スタンバイ両方が稼働しデータ損失は発生しません。フェイルオーバーはプライマリデータベースが予期せず障害停止した際に実行され、保護モードによって少量のデータ損失が発生する可能性があります。
Q2:高可用性用途にはどのスタンバイ種別を選ぶべきか?
大半の本番HA構成には物理スタンバイが適切です。プライマリとブロック単位で完全一致し、オーバーヘッドが少なく最速のフェイルオーバーを実現します。論理スタンバイはレポート作成やローリングアップグレードに適しています。
Q3:スタンバイデータベースは何台まで構成可能か?
Oracle 11g R2以降、1つのData Guard構成に最大30台のスタンバイデータベースを設定できます。
Q4:Data Guardはプライマリデータベースのパフォーマンスに影響を与えるか?
転送モードによります。ASYNC非同期転送はスタンバイからの応答を待機しないためプライマリへの影響が最小限です。SYNC同期転送はデータ保護レベルが高い反面、プライマリとスタンバイ間のネットワーク往復遅延が大きい場合、レイテンシが増加する可能性があります。
Q5:構成完了後、Data Guardが正常に動作しているか確認する方法は?
スタンバイ側でv$managed_standbyを照会し適用プロセスの稼働を確認、v$archive_gapでログシーケンスの欠損がないか点検します。プライマリ側ではv$dataguard_statusから現在の転送・適用状況を確認可能です。
Q6:ネットワーク障害によりスタンバイの同期が遅れた場合はどうなる?
ネットワーク接続が復旧するとData Guardが自動的にログ欠損を検知し、アーカイブREDOログを使用してスタンバイを再同期します。アーカイブログが残存しない場合はRMAN増分バックアップによりスタンバイを同期状態に戻せます。
Oracle Data Guardの構築は基幹データ保護を担う管理者の基本業務です。本ステップガイドに沿って作業を実施することで、プライマリデータベースの適切な事前準備、ログ転送向けネットワーク最適化、即時切り替え可能なスタンバイデータベースを整備できます。
Data Guard環境の信頼性は定期的な検証に依存します。必ず非本番環境でスイッチオーバー試験を実施し構成を検証してください。実災害発生時にチームが確実に業務継続性を維持できるよう、知識とインフラを事前に確立します。