デルタ競合検出および解決
デルタ競合検出では、行LCRの古い列リストの値が表の対応する行の値と異なる場合に、競合が発生します。
表に対してデルタ競合検出および解決を構成するには、DBMS_GOLDENGATE_ADM
パッケージのADD_AUTO_CDR_DELTA_RES
プロシージャを実行します。デルタ解決方法は、タイムスタンプまたは追加の解決の列には依存しません。デルタ競合解決では、競合を解決するために、行LCRの新しい値と古い値の差が表の値に加算されます。この解決方法は一般に、勘定科目残高などの財務データに使用されます。たとえば、銀行残高が2つのサイトで同時に更新される場合、すべての借方および貸方で収束値が計上されます。
この例は、データベースAおよびデータベースBでレプリケートされている行を示しています。Balance
列は、デルタ競合解決の実行対象として指定された列、TS1
列は非表示のタイムスタンプ列で、Balance
列に対する各変更の時刻を追跡します。両方のデータベースで、行の Balance
値にほぼ同時に変更が加えられます(データベースAでは@T20
、データベースBでは@T22
)。これらの変更により競合が発生するため、デルタ競合解決を使用して次のように競合を解決します。
-
データベースAで、
Balance
値が100
から110
に変更されました。したがって、値が10だけ増加しました。 -
データベースBで、
Balance
値が100
から120
に変更されました。したがって、値が20だけ増加しました。 -
データベースAで競合を解決するために、行LCRの新しい値と古い値の差が表の値に加算されます。LCRの新しい値と古い値の差は20です(120–100=20)。したがって、表の現在の値(110)が20だけ増加して、競合解決後の値は130になります。
-
データベースBで競合を解決するために、行LCRの新しい値と古い値の差が表の値に加算されます。LCRの新しい値と古い値の差は10です(110–100=10)。したがって、表の現在の値(120)が10だけ増加して、競合解決後の値は130になります。
デルタ競合解決後は、データベースAとデータベースBの行で、Balance
列の値が同一になります。