変更前の値と変更後の値の取得

更新および削除操作では、ソース列の変更前の値(更新発生前の値)を取得すると役立つことがあります。挿入の場合は、すべての列値が変更後イメージとみなされます。

これらの値は証跡に格納されており、フィルタおよび列マッピングで使用できます。たとえば、次のことが可能です。

  • 例外MAP文における列マッピング指定の一部として、行の変更前イメージを取得し、競合解決ルーチンのテストまたはトラブルシューティング用に、それらの値を例外表にマップします。

  • デルタ計算を実行します。たとえば、表にBalance列が含まれる場合、新しい残高から元の残高を差し引いて特定のトランザクションの正味の結果を計算できます。次に例を示します。

    MAP "owner"."src", TARGET "owner"."targ",
    COLMAP (PK1 = PK1, delta = balance – @BEFORE (balance));
    

    ノート:

    前の例は、Oracleなどの大/小文字が区別されるデータベースを示しています。表名は、大/小文字の区別を表すために引用符で囲まれています。

変更前の値を参照する手順

  1. 次のように、@BEFORE列変換関数と、変更前の値を必要とする列の名前を使用します。

    @BEFORE (column_name)
    
  2. GETUPDATEBEFORESパラメータをExtractのパラメータ・ファイルで使用して、トランザクション・レコードから変更前イメージを取得するか、Replicatのパラメータ・ファイルで使用して、列マッピングまたはフィルタで変更前イメージを使用します。競合の検出および解決(CDR)機能を使用する場合は、TABLEGETBEFORECOLSオプションを使用できます。これらのパラメータを使用するには、すべての列がトランザクション・ログに存在している必要があります。データベースで、変更された列の値のみを記録している場合、@BEFORE関数を使用すると、列の欠落状態が発生し、列がレコードに存在しない場合と同じように列マップが実行されます。列値の使用可能性を確保するには、「フィルタでのデータ使用可能性の確保」を参照してください。

    Oracle GoldenGateには、フィルタリング、変換関数または他の目的で必要な場合に変換後の値を取得する@AFTER関数も用意されています。@BEFOREおよび@AFTERの詳細は、『Oracle GoldenGateリファレンス』を参照してください。