はじめに
Oracle Data Guard 環境下にて、Oracle GoldenGate を運用する際に、ExtractプロセスのTRANLOGOPTIONS HANDLEDLFAILOVER
パラメータの必要性と使用時の運用考慮事項を紹介します。
環境
本記事は下記環境にて動作確認を行っています。
- Oracle Database 19c Enterprise Edition 19.16.0.0.0
- Oracle GoldenGate 19.1 19.1.0.0.210720
TRANLOGOPTIONS HANDLEDLFAILOVERとは
TRANLOGOPTIONS HANDLEDLFAILOVERは、Extractプロセスに設定可能なパラメータです。本パラメータを有効化した場合、Extractプロセスは、Data Guardのスタンバイデータベースに適用済みのREDOデータのみを抽出する動作になります。本パラメータの必要性について、例を挙げて紹介します。
システム構成例
- GoldenGateのPrimary Extract(いわゆるCaptureプロセス)はData Guardのプライマリデータベースから、REDOデータを抽出し、ターゲットシステムに転送します。
- Replicatプロセスがターゲットデータベースにトランザクションデータを適用します。
- Data GuardのREDO適用により、スタンバイデータベースは更新されます。
TRANLOGOPTIONS HANDLEDLFAILOVERを使用しない場合
Extractプロセスは、スタンバイデータベースのREDO適用状態を考慮しないため、スタンバイデータベースに未適用のREDOデータを抽出する可能性があります。その場合、一時的にターゲットデータベースに適用されたソースデータベースのSCNが、スタンバイデータベースのSCNよりも大きい(新しい)状態になります。
上記状態において、プライマリデータベースに障害が発生し、データロストを伴うData Guardのフェイルオーバを実行した場合、下記図の状態となります。
- スタンバイデータベースは、
SCN90
の状態で新プライマリに昇格します。
未適用のREDO(SCN91以降)データはロストします。 - ターゲットデータベースは、
SCN100
まで適用されているため、新プライマリデータベースとデータ不整合が発生した状態となります。 - データ不整合が発生しているため、GoldenGateのレプリケーションはエラーが発生します。
GoldenGateのレプリケーションを再開するためには、初期データ移行をやり直すなど復旧に時間を要します。
TRANLOGOPTIONS HANDLEDLFAILOVERを使用した場合
Extractプロセスによる抽出処理は、スタンバイデータベースに適用されたREDOデータのみを抽出するため、スタンバイデータベースのSCN(データベース断面)は、ターゲットデータベースよりも新しい状態である事が保証されます。先ほどの例と同様にデータロストを伴うフェイルオーバ後の状態を下記に示します。
- ソースシステムフェイルオーバ後
- スタンバイデータベースは、
SCN100
の状態で新プライマリに昇格します。
未適用のREDO(SCN101以降)データはロストします。 - ターゲットデータベースは、
SCN90
まで適用されているため、新プライマリデータベースのSCN91以降のトランザクションから、GoldenGateのレプリケーションを再開できます。
TRANLOGOPTIONS HANDLEDLFAILOVERの考慮事項
Extract遅延事象
Data Guardの保護モードが、最大パフォーマンスモード
の場合、Extractプロセスの抽出タイミングが、60秒に1回程度
になる動作を筆者環境にて確認しました。
回避方法1
Extract処理が60秒に1回となる動作が許容できない場合は、データベース初期化パラメータの _redo_transport_stream_writes
を false
に設定する事で上記の待機動作を回避できますが、隠しパラメータのため、使用する際はSRにて、ご確認ください。
回避方法2
Data Guardの保護モードを最大可用性モード
にする事で、上記待機事象は回避可能です。REDO転送モードは、Fast Sync(SYNC NOAFFIRM)、あるいは SYNC AFFIRM どちらでも大丈夫です。ただし、最大可用性モードに設定する事でプライマリデータベース側のトランザクション性能が低下する可能性がある点をご注意ください。