エラー処理

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

表9-15 USEDELTA、USEMAXおよびIGNOREによる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=100balance=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の解決列の変更後イメージです。変更後イメージが存在するため、これが解決の特定に使用されます。

salary=200は、USEDELTA解決の唯一の変更後イメージです。balanceについては、変更前イメージが計算で使用されます。

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

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

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

salary=600balance=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)100
11)'9/1/10 3:00'

addresssalarybalancelast_mod_timeの各列の値が異なるため、このSQLはデータが見つからないというエラーを戻します。

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

SQLバインド変数:

1)200
2)100
3)'Mary'

salaryには100の差がありますが、balanceの値に変更がなかったため、更新のSQLではsalaryは不要です。USEDELTAでは、証跡内のsalaryの変更後イメージ(200)と変更前イメージ(100)の差が、ターゲットのsalaryの現行値(600)に追加されます。結果は700です。

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

SQLバインド変数:

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

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

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

IGNOREに対し、Replicatによって適用されるUPDATE

SQLバインド変数:

1)'222222'
2)'new'
3)'Mary'

DEFAULT列グループ(phonecomment)にIGNOREが指定されているため、解決のSQLは適用されません。