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