GETUPDATEBEFORES | IGNOREUPDATEBEFORES

適用対象

ExtractおよびReplicat

説明

GETUPDATEBEFORESおよびIGNOREUPDATEBEFORESパラメータでは、Oracle GoldenGateに処理されるレコードに、UPDATE操作の列のビフォア・イメージを含めるかどうかを制御します。ビフォア・イメージには、行が更新される前に存在していた列の詳細情報が含まれます。

(Oracleのみ) Oracle GoldenGateは、デフォルトで、1つの統合更新レコードでの更新操作に対して変更前および変更後の値の両方を取得します。他のデータベースの場合、変更前の値のみがトレイル・ファイルに書き込まれます。前のリリースでは、デフォルトは変更後の値のみをキャプチャするものでした。このリリースからは、カスタムSQL文(SQLEXEC)が、新しいデフォルトの更新形式を使用して、各更新操作で1回のみ実行します。このリリース以前は、カスタムSQL文は、変更前の値が見つかったときの1回と、変更後の値が見つかったときの1回の、2回実行していました。統合更新形式でOracle GoldenGateを使用している場合、@BEFORE@AFTERおよび@BEFOREAFTERファンクションを使用して、前または後の値をカスタムSQL文に明示的に渡すことができます。Oracle GoldenGateではデフォルトでこの更新形式を使用できますが、以前に2つの別々の変更前および変更後のレコードを生成していた競合するパラメータがある場合、古い形式を保持することもできます。この場合、レポート・ファイルに情報メッセージが記録されます。

GETUPDATEBEFORESパラメータは、次のように使用します。

  • Extractパラメータ・ファイルでは、データ・ソースからビフォア・イメージを抽出します。

  • Replicatパラメータ・ファイルでは、Replicat操作にビフォア・イメージを含めます。

ビフォア・イメージとアフター・イメージを比較して、トランザクションの最終結果を確認したり、その他の差分計算を実行したりできます。たとえば、更新前のBALANCEフィールドが100ドルで更新後が120ドルの場合、これらを比較して20ドルの差異を確認できます。Oracle GoldenGateの列変換ファンクションを使用して、比較および計算を実行できます。

パラメータ・ファイルでビフォア・イメージを参照するには、@BEFORE変換ファンクションを使用します。たとえば:

COLMAP (previous = @BEFORE (balance))

競合の検出および解決(CDR)機能を使用する場合は、GETUPDATEBEFORESが必要です。CDRの詳細は、『Oracle GoldenGateの管理』を参照してください。

GETUPDATEBEFORESおよびIGNOREUPDATEBEFORESパラメータは、表に固有です。一方のパラメータは、もう一方のパラメータが見つかるまで、それ以降のすべてのTABLEまたはMAP文に有効です。

これらのパラメータは、MAP文で有効化または無効化を選択できるため、調整Replicatの様々なスレッドに対して有効にしたり、無効にしたりできます。あるセットのMAP文にGETUPDATEBEFORESスレッドを指定し、別のセットのMAP文にIGNOREUPDATEBEFORESを指定します。

GETUPDATESBEFORESの制限:
  • PostgreSQLの場合、LOB列のビフォア・イメージは記録されず、トレイルに書き込まれません。

  • SQL Serverでは、IMAGENTEXTおよびTEXTデータ型の列がビフォア・イメージの操作のNULL値として記録され、VARBINARY(MAX)VARCHAR(MAX)およびNVARCHAR(MAX)の列は、列が更新されていないかぎりビフォア・イメージの操作に対してNULL値として記録されます。

デフォルト

IGNOREUPDATEBEFORES

構文

GETUPDATEBEFORES | IGNOREUPDATEBEFORES

この例では、GETUPDATEBEFORESIGNOREUPDATEBEFORESを選択して様々なMAP文に適用する方法を示します(各文が、調整Replicatの異なるスレッドに該当します)。

GETUPDATEBEFORES
MAP sales.cust, TARGET sales.cust, THREAD (1);
MAP sales.ord, TARGET sales.ord, THREAD (2);
IGNOREUPDATEBEFORES
MAP sales.loc, TARGET sales.loc, THREAD (3);