トランザクション履歴の使用
Oracle GoldenGateでは、ターゲット・レコードに対する変更の履歴を保持して、各変更の原因となった操作に関する情報をマップできます。この履歴は、各レコードの最新バージョンのみを含むのではなく、表に対して実行されたすべての操作の個別レコードを含むトランザクションベースのレポート・システムを作成する場合に役立ちます。
たとえば、CUSTOMER
という名前のターゲット表に対して行われた次の一連の操作では、ID Dave
の履歴は残りません。最後の操作でレコードを削除するため、Daveの口座の履歴や最後の残高を知ることはできません。
表8-5 CUSTOMER表の操作履歴
順序 | 操作 | ID | 残高 |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
一連のレコードとしてこの履歴を保持すると、多くの場面で役立ちます。たとえば、トランザクションの正味の効果を生成できます。
トランザクション・レポートを実装する手順
- 変更前の値を取得するようにExtractを準備するため、Extractのパラメータ・ファイルで
GETUPDATEBEFORES
パラメータを使用します。変更前の値(または変更前イメージ)は、更新が実行される前に列に存在する値です。変更前イメージによって、Oracle GoldenGateでトランザクション・レコードを作成できます。 - 挿入としてすべての操作を適用するようにReplicatを準備するため、Replicatのパラメータ・ファイルで
INSERTALLRECORDS
パラメータを使用します。表に対する各操作は、その表内の新規レコードになります。 - トランザクション履歴をマップするため、
@GETENV
列変換関数のGGHEADER
オプションの戻り値を使用します。TABLE
パラメータまたはMAP
パラメータのCOLMAP
文に、ソース式として変換関数を含めます。
**INTERNAL XREF ERROR**に示されている一連のサンプル・トランザクションを使用して、データベースの最新状態ではなく、よりトランザクション指向の強い顧客ビューを生成するために、次のパラメータ構成を作成できます。
プロセス | パラメータ文 |
---|---|
Extract |
GETUPDATEBEFORES TABLE ACCOUNT.CUSTOMER; |
Replicat |
INSERTALLRECORDS MAP SALES.CUSTOMER, TARGET SALES.CUSTHIST, COLMAP (TS = @GETENV ('GGHEADER', 'COMMITTIMESTAMP'), BEFORE_AFTER = @GETENV ('GGHEADER', 'BEFOREAFTERINDICATOR'), OP_TYPE = @GETENV ('GGHEADER', 'OPTYPE'), ID = ID, BALANCE = BALANCE); |
ノート:
この例は、Oracle GoldenGateプロセスの完全なパラメータ・ファイルを表していません。これらの例が、大/小文字が区別されないデータベースを表していることにも注意してください。
この構成によって、各トランザクションの正味合計と、トランザクションの時刻および顧客IDを戻す次のような問合せが可能になります。
SELECT AFTER.ID, AFTER.TS, AFTER.BALANCE - BEFORE.BALANCE FROM CUSTHIST AFTER, CUSTHIST BEFORE WHERE AFTER.ID = BEFORE.ID AND AFTER.TS = BEFORE.TS AND AFTER.BEFORE_AFTER = 'A' AND BEFORE.BEFORE_AFTER = 'B';