自動競合検出および解決

Oracle Database間で表をレプリケートするOracle GoldenGate構成によって、自動競合検出および解決を構成できます。表に対して競合検出および解決を構成するには、DBMS_GOLDENGATE_ADMパッケージのADD_AUTO_CDRプロシージャをコールします。

Oracle GoldenGateが、Oracle Databaseが発生元である変更を取得するときに、各変更が行の論理変更レコード(LCR)にカプセル化されます。行LCRはDML行変更の構造化表現です。それぞれの行LCRに操作タイプ、古い列値および新しい列値が含まれます。複数の行LCRを単一のデータベース・トランザクションに含めることができます。

表の複数のレプリカで、表に対する変更が許可される場合に、異なる2つのデータベースの同じ行にほぼ同時に変更が加えられると、競合が発生することがあります。Oracle GoldenGateは行のLCRを使用して変更をレプリケートします。競合を検出するために、発生元データベースでの初期変更の行LCRに含まれる古い値を、宛先データベースの対応する表の行の現在の値(キー列で識別される)と比較します。一致しない列値がある場合は、競合が存在します。

競合を検出すると、Oracle GoldenGateは競合を解決するために、行の値を行LCRに含まれる値で上書きするか、行LCRの値を無視するか、デルタを計算して行の値を更新します。

次に示す理由で、自動競合検出および解決のためにアプリケーションを変更する必要はありません。

  • Oracle Databaseによって非表示のタイムスタンプ列が自動的に作成されて保持されます。

  • 挿入、更新および削除では、削除ツームストン・ログ表が使用されて行が削除されたか判断されます。

  • LOB列の競合を検出できます。

  • Oracle Databaseによって必要な列に対するサプリメンタル・ロギングが自動的に構成されます。

ノート:

自動変更検出および解決が有効になっている表でクラシックReplicatを使用する場合、Extractは「OGG-10461 Failed to retrieve timestamp」エラーで異常終了することがあります。これは、レコードをツームストン表に挿入する内部トリガーがユーザーDMLでのみ起動するためです。クラシックReplicatはすべてのトリガーの起動を抑制するため、ツームストン表への挿入がなくなります。