29 開発者および管理者向けのOracle GoldenGateアクティブ/アクティブ・ガイダンス

Oracle MAAは、GoldenGateレプリカ間でデータの競合が発生する可能性があるアクティブ/アクティブ分散データベース・アーキテクチャを、Oracle GoldenGateアーキテクチャを使用して設計する際の開発者および管理者向けのガイダンスとなります。

これらのOracle GoldenGateまたはMAA Platinumアーキテクチャの場合、アクティブ/アクティブ・レプリケーションでは、自動競合検出および解消(自動CDR)を含む競合検出および解消、またはGoldenGateパラメータCOMPARECOLSおよびRESOLVECONFLICT (このトピックでは、COMPARECOLS/RESOLVECONFLICTSメソッドと呼びます)を使用した競合検出および解消を手動で実行する方法が必要です。Oracle GoldenGateドキュメントで自動競合検出および解決および手動による競合検出および解決も参照してください。

一般的なGoldenGateの詳細は、Oracle GoldenGateのドキュメントを参照してください。これらの手順は、Oracle対Oracleレプリケーションに固有です。Oracle以外/異機種のアクティブ/アクティブについては、『Oracle GoldenGateパラメータおよび機能リファレンス・ガイド』COMPARECOLSおよびRESOLVECONFLICTパラメータを参照してください。

競合解消の準備

アクティブ/アクティブ・レプリケーションでは、Oracle DatabaseとOracle GoldenGate間のより緊密な統合が必要であり、円滑なエクスペリエンスを実現するためにアプリケーションおよびデータベース構造の観点から満たす必要のある追加要件がいくつかあります。

これらの要件は、競合が発生する可能性がある表にのみ関係します。1つのサーバーでのみ更新される表がアプリケーションにある場合(たとえば、バッチ・プロセスの一部として年に1回更新される郵便番号と市区町村の関係を含む参照表)、そのような表がこれらの要件を満たす必要はありません。

これらの要件が存在する理由を理解するために、競合をどのように検出して解消するかについて簡単に説明します:

競合を検出するために、Oracle GoldenGateでは、GoldenGate ReplicatがWHERE句で使用できるすべての列のイメージを含むWHERE句を使用して、UPDATEまたはDELETE DML文を構築します。そのDML操作から「行が見つかりません」という例外が返された場合、それは競合が発生していることを意味し、Replicatでは、その行の他の値が変更されたかどうか、または行が削除されたかどうかを判断するために追加のステップを実行します。この判断は、ターゲット表を問い合せて、その主キーを持つ行が存在するかどうかを確認することによって行われます。解消部分では、2つの異なるデータベース間で2つの行が同じになるように、最終的な一貫性が実現します。この解消では通常、Replicatが適用している現在のDML操作を無視するか、ターゲット行の既存のデータを上書きします。

Oracle GoldenGateのドキュメントでは、自動CDRとCOMPARECOLS/RESOLVECONFLICTSメソッドの両方で競合を解消する様々な方法について説明し、それぞれがどのように機能するかの例も示しています。詳細は、「自動競合検出および解決」および「手動の競合検出および解決」を参照してください。

要件

  • 主キーの要件
    • 表には、1つ以上の列で構成される主キーが必要です。
    • 主キーの一意性は、すべてのデータベースで一意になるように生成する必要があります。双方向アクティブ/アクティブでは、一方のデータベースでは奇数(1,3,5、...)の順序を、他方のデータベースでは偶数(2,4,6、...)の順序を主キーに割り当てることができます。これにより、2つのデータベースが異なる行に対して同じ主キーを持たないことが保証され、挿入の競合が発生することはありません。
  • 表構造の要件

    • 手動による競合検出および解消を使用し、タイムスタンプベースの解消である独自のCOMPARECOLS/RESOLVECONFLICTSを定義する場合、表には、すべてのデータベースで同じタイムゾーンを使用するタイムスタンプ列が必要です。自動CDRでは、既存の表にタイムスタンプ列は必要ありません。
    • ラージ・オブジェクト(JSON、BLOB、CLOBなど)およびユーザー定義オブジェクト(抽象データ型、コレクション、配列)内の競合は、Oracle GoldenGateでは検出できません。これらの列はOracle GoldenGateによってWHERE句で使用されないためです。
    • 主キー以外の列に一意性が必要な場合は、表に対するトリガーを使用したり、アプリケーションを介してこれを強制する必要があります。
    • レプリケートする表にはすべての列のサプリメンタル・ロギングが必要であり、ターゲット表の変更に対して生成されるREDOログの量が増加します。
  • 必須のGoldenGateの設定
    • 自動CDRの場合、ExtractにMAPINVISIBLECOLUMNSおよびLOGALLSUPCOLSを含める必要があります。Replicatは、統合Replicatまたは統合モードのパラレルReplicatである必要があります。
    • COMPARECOLS/RESOLVECONFLICTSの場合、ExtractでLOGALLSUPCOLSを使用する必要があります。

アクティブ/アクティブOracle GoldenGateアーキテクチャのベスト・プラクティス

アクティブ/アクティブ構成が円滑に実行されるように、これらは考慮する必要があるベスト・プラクティスの推奨事項です。

アプリケーションの推奨事項

  • 競合を回避できる場合は、回避します。たとえば、ミシシッピ州東部のユーザーをバージニア州アッシュバーンのサーバーを使用するようにルーティングし、ミシシッピ州西部のユーザーをアリゾナ州フェニックスにあるサーバーを使用するようにルーティングするなど、地理的地域別にユーザーを分割することが考えられます。このような地理的分割により、2人のユーザーが同じ行を変更する場合の競合を回避できることがよくあります。ユーザーは、アカウント番号(一方のサーバーでは偶数、もう一方のサーバーでは奇数)や名前(A-MまたはN-Z)によって分割することもできます。
  • 接続の持続性や地理的な親和性も重要です。ロード・バランサを使用してデータベースにトラフィックをルーティングする場合は、ユーザーの接続が失われてもすぐに再接続した場合に、以前と同じサーバーに送信されるように、ある種の接続永続性を組み込む必要があります。これにより、ユーザーがサーバーAで変更を行い、切断後に再接続するといった状況が回避されます。データがレプリケートされる前にユーザーがサーバーBに接続すると、ユーザー・エクスペリエンスが低下する可能性があります。
  • 自動CDRでは主キー更新の競合検出および解消が(ツームストン表を使用して)サポートされますが、COMPARECOLS/RESOLVECONFLICTSメソッドではサポートされません。そのため、COMPARECOLS/RESOLVECONFLICTSメソッドを使用している場合は、競合が発生しない方法で主キーの更新を実行する必要があります。
  • 場合によっては、所定の競合解消ポリシーによってデータベースで実行した内容が元に戻されたり上書きされたことをユーザーに通知することが必要になります。自動CDRには、競合が発生したタイミングおよび実行された解消内容を追跡するために使用できるビュー(DBA_APPLY_ERROR_MESSAGES)があります。すべてのデータベースでこの表をモニタリングします。

データベースの推奨事項

  • エディション・ベースの再定義を使用すると、スキーマ変更の停止時間をゼロにできます。また、Oracle Database 23aiでは、サプリメンタル・ロギングが設定された表に対するDDL操作で、表に対する排他ロックが不要になりました。Oracle Database 19cでは、エディション・ベースの再定義は、この排他ロック要件のため、アクティブなGoldenGateレプリケーションでは利用されませんでした。
  • DDLは一度に1つのノードでのみ実行する必要があり、単方向でのみレプリケートされます。GoldenGateでは、DDL操作内の競合はサポートされません。

Oracle GoldenGateの推奨事項

  • プロシージャ・レプリケーションを有効にして、DBMS_GOLDENGATE_ADMコールを使用して表に対する自動CDRを有効または無効にすると、そのコマンドがターゲット・データベースに自動的にレプリケートされるようにします。

    TRANLOGOPTIONS INTEGRATEDPARAMS (ENABLE_PROCEDURAL_REPLICATION Y)

  • 統合パラレルReplicatの使用をお薦めします。自動CDRは、パラレル非統合Replicat、クラシックReplicatまたは調整Replicatではサポートされていません。
  • DDLレプリケーションは、Extractパラメータ・ファイルとReplicatパラメータ・ファイルの両方で、レプリケーション内のすべての表に対して有効にする必要があります(構文DDL INCLUDE ALL)。