デルタ競合検出および解決

デルタ競合検出では、行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列の値が同一になります。