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では、
IMAGE
、NTEXT
およびTEXT
データ型の列がビフォア・イメージの操作のNULL
値として記録され、VARBINARY(MAX)
、VARCHAR(MAX)
およびNVARCHAR(MAX)
の列は、列が更新されていないかぎりビフォア・イメージの操作に対してNULL値として記録されます。
デフォルト
IGNOREUPDATEBEFORES
構文
GETUPDATEBEFORES | IGNOREUPDATEBEFORES
例
この例では、GETUPDATEBEFORES
とIGNOREUPDATEBEFORES
を選択して様々な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);