変更前の値と変更後の値の取得
更新および削除操作では、ソース列の変更前
の値(更新発生前の値)を取得すると役立つことがあります。挿入の場合は、すべての列値が変更後
イメージとみなされます。
これらの値は証跡に格納されており、フィルタおよび列マッピングで使用できます。たとえば、次のことが可能です。
-
例外
MAP
文における列マッピング指定の一部として、行の変更前イメージを取得し、競合解決ルーチンのテストまたはトラブルシューティング用に、それらの値を例外表にマップします。 -
デルタ計算を実行します。たとえば、表に
Balance
列が含まれる場合、新しい残高から元の残高を差し引いて特定のトランザクションの正味の結果を計算できます。次に例を示します。MAP "owner"."src", TARGET "owner"."targ", COLMAP (PK1 = PK1, delta = balance – @BEFORE (balance));
ノート:
前の例は、Oracleなどの大/小文字が区別されるデータベースを示しています。表名は、大/小文字の区別を表すために引用符で囲まれています。
変更前の値を参照する手順
-
次のように、
@BEFORE
列変換関数と、変更前の値を必要とする列の名前を使用します。@BEFORE (
column_name
) -
GETUPDATEBEFORES
パラメータをExtractのパラメータ・ファイルで使用して、トランザクション・レコードから変更前イメージを取得するか、Replicatのパラメータ・ファイルで使用して、列マッピングまたはフィルタで変更前イメージを使用します。競合の検出および解決(CDR)機能を使用する場合は、TABLE
のGETBEFORECOLS
オプションを使用できます。これらのパラメータを使用するには、すべての列がトランザクション・ログに存在している必要があります。データベースで、変更された列の値のみを記録している場合、@BEFORE
関数を使用すると、列の欠落状態が発生し、列がレコードに存在しない場合と同じように列マップが実行されます。列値の使用可能性を確保するには、「フィルタでのデータ使用可能性の確保」を参照してください。Oracle GoldenGateには、フィルタリング、変換関数または他の目的で必要な場合に変換後の値を取得する
@AFTER
関数も用意されています。@BEFORE
および@AFTER
の詳細は、『Oracle GoldenGateリファレンス』を参照してください。