USEMAX解決によるINSERTROWEXISTSの処理

この例では、証跡とデータベースのレコードに対する適用可能な変更前イメージと変更後イメージを使用したUSEMAX解決を説明しています。ソースとターゲットに行が存在するが、一部またはすべての行の値が異なる場合の挿入の解決方法を示します。

表9-9 USEMAX解決によるINSERTROWEXISTS競合の処理

イメージ SQL コメント

証跡内の変更前イメージ

None (row was inserted on the source).

N/A

証跡内の変更後イメージ

name='Mary'
phone='1234567890'
address='Oracle Pkwy'
salary=100
balance=100
comment=NULL
last_mod_time='9/1/10 3:00'

last_mod_time='9/1/10 3:00は、解決列の変更後イメージです。変更後イメージが存在するため、これが解決の特定に使用されます。

ターゲット・データベースのイメージ

name='Mary'
phone='111111'
address='Ralston'
salary=200
balance=500
comment='aaa'
last_mod_time='9/1/10 1:00'

last_mod_time='9/1/10 1:00は、ターゲットの解決列の現行イメージであり、証跡内の解決列の値はこれと比較されます。

Replicatによって適用され、競合を検出する初期INSERT

SQLバインド変数:

1)'Mary'
2)'1234567890'
3)'Oracle Pkwy'
4)100
5)100
6)NULL
7)'9/1/10 3:00'

このSQLは、Maryに対する一意性競合を戻します。

競合を解決するためにReplicatによって適用されるUPDATE

SQLバインド変数:

1)'1234567890'
2)'Oracle Pkwy'
3)100
4)100
5)NULL
6)'9/1/10 3:00'
7)'Mary'
8)'9/1/10 3:00'

INSERTROWEXISTSに対してUSEMAXが指定されているため、Replicatは挿入を更新に変換し、証跡レコードのlast_mod_timeの値をデータベースの値と比較します。レコードの値の方が大きいため、証跡ファイル内の列の変更後イメージがターゲットに適用されます。