トランザクション履歴の使用

Oracle GoldenGateでは、ターゲット・レコードに対する変更の履歴を保持して、各変更の原因となった操作に関する情報をマップできます。この履歴は、各レコードの最新バージョンのみを含むのではなく、表に対して実行されたすべての操作の個別レコードを含むトランザクションベースのレポート・システムを作成する場合に役立ちます。

たとえば、CUSTOMERという名前のターゲット表に対して行われた次の一連の操作では、ID Daveの履歴は残りません。最後の操作でレコードを削除するため、Daveの口座の履歴や最後の残高を知ることはできません。

表8-5 CUSTOMER表の操作履歴

順序 操作 ID 残高

1

Insert

Dave

1000

2

Update

Dave

900

3

Update

Dave

1250

4

Delete

Dave

1250

一連のレコードとしてこの履歴を保持すると、多くの場面で役立ちます。たとえば、トランザクションの正味の効果を生成できます。

トランザクション・レポートを実装する手順

  1. 変更前の値を取得するようにExtractを準備するため、Extractのパラメータ・ファイルでGETUPDATEBEFORESパラメータを使用します。変更前の値(または変更前イメージ)は、更新が実行される前に列に存在する値です。変更前イメージによって、Oracle GoldenGateでトランザクション・レコードを作成できます。
  2. 挿入としてすべての操作を適用するようにReplicatを準備するため、Replicatのパラメータ・ファイルでINSERTALLRECORDSパラメータを使用します。表に対する各操作は、その表内の新規レコードになります。
  3. トランザクション履歴をマップするため、@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';