最新のタイムスタンプの競合検出および解消
DBMS_GOLDENGATE_ADM
パッケージのADD_AUTO_CDR
プロシージャを実行して、Oracle GoldenGate自動競合検出および解決のために表を構成すると、非表示のタイムスタンプ列が表に追加されます。この非表示のタイムスタンプ列によって行変更の時間が記録され、この情報を使用して競合が検出されて解決されます。
行LCRを適用すると、INSERT
、UPDATE
またはDELETE
操作で競合が発生する可能性があります。次の表では、それぞれの競合のタイプと、その解決方法について説明します。
操作 | 競合検出 | 競合解決 |
---|---|---|
|
競合が検出されるのは、表のキー列の値が行LCRの新しい値と同じ場合です。 |
行LCRのタイムスタンプが表の行のタイムスタンプより遅い場合は、行LCRの値で表の値が置き換えられます。 行LCRのタイムスタンプが表の行のタイムスタンプより早い場合は、行LCRが破棄され、表の値が保持されます。 |
|
次のそれぞれの場合に競合が検出されます。
|
値が一致せず、行LCRのタイムスタンプが表の行のタイムスタンプより遅い場合は、行LCRの値で表の値が置き換えられます。 値が一致せず、行LCRのタイムスタンプが表の行のタイムスタンプより早い場合は、行LCRが破棄され、表の値が保持されます。 表の行が存在せず、行LCRのタイムスタンプがツームストン表の行のタイムスタンプより遅い場合は、行LCRが 表の行が存在せず、行LCRのタイムスタンプがツームストン表の行のタイムスタンプより早い場合は、行LCRが破棄されます。 表の行が存在せず、対応する行がツームストン表に存在しない場合は、行LCRが |
|
次のそれぞれの場合に競合が検出されます。
|
行LCRのタイムスタンプが表のタイムスタンプより遅い場合は、行が表から削除されます。 行LCRのタイムスタンプが表のタイムスタンプより早い場合は、行LCRが破棄され、表の値が保持されます。 削除が成功した場合は、行LCRがツームストン表に挿入されてログに記録されます。 表の行が存在しない場合は、行LCRがツームストン表に挿入されてログに記録されます。 |
次のイメージは、データベースAとデータベースBの間の競合解決を示しています。
この例は、データベースAおよびデータベースBでレプリケートされている行を示しています。データベース列は、Name
、RowTS
、Office
、Title
および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です。