最新のタイムスタンプの競合検出および解消

DBMS_GOLDENGATE_ADMパッケージのADD_AUTO_CDRプロシージャを実行して、Oracle GoldenGate自動競合検出および解決のために表を構成すると、非表示のタイムスタンプ列が表に追加されます。この非表示のタイムスタンプ列によって行変更の時間が記録され、この情報を使用して競合が検出されて解決されます。

行LCRを適用すると、INSERTUPDATEまたはDELETE操作で競合が発生する可能性があります。次の表では、それぞれの競合のタイプと、その解決方法について説明します。

操作 競合検出 競合解決

INSERT

競合が検出されるのは、表のキー列の値が行LCRの新しい値と同じ場合です。

行LCRのタイムスタンプが表の行のタイムスタンプより遅い場合は、行LCRの値で表の値が置き換えられます。

行LCRのタイムスタンプが表の行のタイムスタンプより早い場合は、行LCRが破棄され、表の値が保持されます。

UPDATE

次のそれぞれの場合に競合が検出されます。

  • 行LCRのタイムスタンプ値と、表の対応する行のタイムスタンプ値が一致しない場合。

  • 行LCRの列グループの古い値が、対応する表の行の列値と一致しない場合。列グループは、レプリケート表の1つ以上の列を論理的にグループ化したものです。

  • 表の行が存在しない場合。行がツームストン表にある場合は、更新/削除競合と呼ばれます。

値が一致せず、行LCRのタイムスタンプが表の行のタイムスタンプより遅い場合は、行LCRの値で表の値が置き換えられます。

値が一致せず、行LCRのタイムスタンプが表の行のタイムスタンプより早い場合は、行LCRが破棄され、表の値が保持されます。

表の行が存在せず、行LCRのタイムスタンプがツームストン表の行のタイムスタンプより遅い場合は、行LCRがUPDATE操作からINSERT操作に変換され、表に挿入されます。

表の行が存在せず、行LCRのタイムスタンプがツームストン表の行のタイムスタンプより早い場合は、行LCRが破棄されます。

表の行が存在せず、対応する行がツームストン表に存在しない場合は、行LCRがUPDATE操作からINSERT操作に変換され、表に挿入されます。

DELETE

次のそれぞれの場合に競合が検出されます。

  • 行LCRのタイムスタンプ値と、表の対応する行のタイムスタンプ値が一致しない場合。

  • 表の行が存在しない場合。

行LCRのタイムスタンプが表のタイムスタンプより遅い場合は、行が表から削除されます。

行LCRのタイムスタンプが表のタイムスタンプより早い場合は、行LCRが破棄され、表の値が保持されます。

削除が成功した場合は、行LCRがツームストン表に挿入されてログに記録されます。

表の行が存在しない場合は、行LCRがツームストン表に挿入されてログに記録されます。

次のイメージは、データベースAとデータベースBの間の競合解決を示しています。
最新のタイムスタンプ・メソッドを使用した最新のタイムスタンプによる競合解決。

この例は、データベースAおよびデータベースBでレプリケートされている行を示しています。データベース列は、NameRowTSOfficeTitleおよびSalaryです。RowTS列は、両方のデータベースで非表示の列です。データベースAのOffice列に更新があり、同時にデータベースBのTitle列に更新があります。これにより競合が発生し、この競合の解決は最新のタイムスタンプ・メソッドを適用して行われます。

  • データベースAでは、Office列の値が1080から1103に更新され、RowTS値が@TS10から@TS20に変更されます。矢印は、この変更がデータベースBにレプリケートされることを示します。

  • データベースBでは、Title列の値がMTS1からMTS2に変更され、RowTS値が@TS10から@TS22に変更されます。

  • この競合を解決するために、データベースBに存在する最新のタイムスタンプが優先されます。これは、データベースAの変更が適用されないことを意味します。データベースAおよびデータベースBに適用される最終的な値は、Scott、@TS22、1080、MTS2、100です。