エラー処理

例外表に対するエラー処理の例は、「エラー処理のためのOracle GoldenGateパラメータ・ファイルの構成」を参照してください。

表9-14 USEDELTAおよびUSEMAXによるUPDATEROWEXISTSの処理

イメージ SQL コメント

証跡内の変更前イメージ

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は、USEMAX解決の解決列の変更前イメージです。

salary=100は、USEDELTA解決の変更前イメージです。

証跡内の変更後イメージ

phone='222222'
address='Holly'
salary=200
comment='new'
last_mod_time='9/1/10 5:00'

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

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

name='Mary'
phone='1234567890'
address='Oracle Pkwy'
salary=600
balance=600
comment='com'
last_mod_time='9/1/10 4:00'

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

salary=600は、USEDELTA解決のターゲット列の現行イメージです。

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

SQLバインド変数:

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

salarylast_mod_timeの値が異なるため、このSQLはデータが見つからないというエラーを戻します。(commentbalanceの値も異なりますが、これらの列は比較されません。)

USEDELTAを使用してsalaryの競合を解決するためにReplicatによって適用されるUPDATE

SQLバインド変数:

1)200
2)100
3)'Mary'

USEDELTAでは、証跡内のsalaryの変更後イメージ(200)と証跡内のsalaryの変更前イメージ(100)の差が、ターゲットのsalaryの現行値(600)に追加されます。結果は700です。

600 + (200 - 100) = 700

USEMAXを使用してデフォルト列の競合を解決するためにReplicatによって適用されるUPDATE

SQLバインド変数:

1)'222222'
2)'Holly'
3)'new'
4)'9/1/10 5:00'
5)'Mary'
6)'9/1/10 5:00'

USEMAXでは、証跡レコード内のlast_mod_timeの変更後の値がデータベースの現行値より大きいため、証跡レコードの変更後の値で行が更新されます。

salary列は、USEDELTA解決のUPDATEで解決されるため、ここでは設定していません。