変更済みデータのキャプチャーのための表の変更

ALTER TABLE ステートメントを使用すると、その表のデータ変更を、データ複製処理で使用するために拡張フォーマットでログに書き込むことができます。

このタスクについて

表の DATA CAPTURE 属性は、表の行に対する更新のために、イメージの前に完全または部分的なイメージがログに書き出されるかどうかを指定します。 表は、デフォルトで DATA CAPTURE NONE 属性を使用して作成されます。 この属性は、表の行に対する更新のために、ログ・レコード内の変更前イメージのみをDb2が書き出すことを意味します。 データ複製を使用可能にするには、DATA CAPTURE CHANGES 属性を使用して表を定義する必要があります。これにより、Db2は、変更前イメージの一部ではなく、ログ・レコード内のイメージの前に全体を書き出します。

DATA CAPTURE CHANGES 属性を使用して表が定義されている場合、ログ・レコード内のイメージ全体には、部分イメージに含まれていない以下の情報が含まれます。

  • SQL データ変更操作
  • 列追加 (ADD COLUMN 文節を使用)
  • 列変更 (ALTER COLUMN 文節を使用)

以下の製品のようなデータ複製ツールは、複製処理に拡張ログ・レコードを使用します。

拡張フォーマット・ログ・レコードは、LOB データおよび XML データには使用できません。

プロシージャー

  • 複製製品がデータ変更をキャプチャーできるようにするには、以下のステップを実行します。
    1. DATA CAPTURE CHANGES 文節を指定して ALTER TABLE ステートメントを発行します。
    2. ソース表からターゲット表への複製を活動化します。
      データ複製ツールは、Db2カタログ・フィールド SYSTABLES.DATACAPTURE をチェックして、DATA CAPTURE が有効になっていることを確認し、それ以外の場合は活動化に失敗します。
    3. データ複製ツールは、IFCID 0306 またはその他のメソッドを介して、ソース表の完全なログ・レコードを使用し始めます。
  • 複製製品によるデータ変更のキャプチャーを無効にするには、以下のステップを実行します。
    1. ソース表からターゲット表への複製を非活動化します。
    2. データ複製ツールがソーステーブルの Db2 ログレコードの消費を停止していることを確認してください。
    3. DATA CAPTURE NONE 文節を指定して ALTER TABLE ステートメントを発行します。

結果

変更の開始

FL 500 DATA CAPTURE 変更は、変更されたテーブルに依存する同時実行文のコミットを待たず、変更は ALTER がコミットする前であっても、同じ Db2 メンバー上の他の同時実行スレッドに即座に反映されます。 結果として、同じトランザクション内の並行ステートメントは、ログ・レコードを異なるフォーマットで書き出すことができます。

例えば、以下の表は、同じトランザクション内の並行スレッドが、異なるフォーマットのログ・レコードを表示する方法を示しています。

スレッド 1 ステートメント スレッド 2 ステートメント ステートメントの結果
UPDATE TB1 SET COL1 ...   UPDATE ステートメントは、TB1 の DATA CAPTURE NONE 属性を参照し、部分的な前イメージを持つログ・レコードを書き出します。
  ALTER TABLE TB1 DATA CAPTURE CHANGES この変更は、スレッド 1 にすぐに表示されます。 ただし、ALTER TABLE ステートメントがコミットされるまで、カタログ変更は他のスレッドに対して可視ではありません。
UPDATE TB1 SET COL2 ...   UPDATE ステートメントは、TB1 の新しい DATA CAPTURE CHANGES 属性を参照し、ALTER TABLE ステートメントまたは自身のトランザクションがコミットする前に、完全なログ・レコードを書き出します。
COMMIT    
UPDATE TB1 SET COL3 ...   UPDATE ステートメントは、TB1の DATA CAPTURE CHANGES 属性を参照し、ALTER TABLE ステートメントがコミットされる前に完全なログ・レコードを書き出します。
  COMMIT ALTER ステートメントのカタログ更新は、他のスレッドに対して可視になります。
UPDATE TB1 SET COL 4 ...   UPDATE ステートメントは、TB1 の DATA CAPTURE CHANGES 属性を参照し、完全なログ・レコードを書き出します。
COMMIT    
変更の終わり