デルタ競合解決

デルタ競合検出では、行LCRの古い列リストの値が表の対応する行の値と異なる場合に、競合が発生します。

表に対してデルタ競合検出および解決を構成するには、DBMS_GOLDENGATE_ADMパッケージのADD_AUTO_CDR_DELTA_RESプロシージャを実行します。デルタ解決方法は、タイムスタンプまたは追加の解決の列には依存しません。デルタ競合解決では、競合を解決するために、行LCRの新しい値と古い値の差が表の値に加算されます。この解決方法は一般に、勘定科目残高などの財務データに使用されます。たとえば、銀行残高が2つのサイトで同時に更新される場合、すべての借方および貸方で収束値が計上されます。

次の図は、デルタ競合検出および解消の例を示します。

図9-2 デルタ競合検出および解決

図9-2の説明を次に示します
「図9-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列の値が同一になります。