目次

Search

  1. はじめに
  2. 一括取り込みデータベース

一括取り込みデータベース

一括取り込みデータベース

SQL Serverソースの変更キャプチャメカニズム

SQL Serverソースの変更キャプチャメカニズム

一括取り込みデータベース
は、SQL Serverソースから変更データをキャプチャしてそのデータをターゲットに適用するための、複数の変更キャプチャメカニズムを提供します。

トランザクションログとCDCテーブルを使用するログベースの変更データキャプチャ

ログベースのCDCを使用するデータベース取り込み増分ロードジョブは、アクティブなトランザクションログからレコードを解析し、CDCテーブルから変更レコードを直接読み取ることで、DMLとDDLの変更をキャプチャします。必要な再開ポイント(LSN)が利用可能な場合、変更データはアクティブなトランザクションログから読み取られます。キャプチャ開始点がトランザクションログ内のレコードより前の日付である場合、またはその他の特定の状況では、
一括取り込みデータベース
は自動的にCDCテーブルからの変更データの読み取りに移行します。CDCテーブルから変更を読み取った後、
一括取り込みデータベース
は、トランスペアレントな方法でアクティブなトランザクションログの読み取りに戻ります。
ログベースの変更キャプチャ処理には、次のコンポーネントが関わります。
  • Informatica Intelligent Cloud Services Secure Agent。SQL Serverインスタンスに対してローカルまたはリモートのLinuxボックスまたはWindowsボックスで実行できます。
  • dbo.$InfaXactテーブル。オープントランザクションに関連付けられ、現在実行中のキャプチャジョブに関する情報を一時的に格納します。テーブルが存在しない場合は、変更キャプチャプロセスによって作成されます。
  • ログリーダーとそのサブコンポーネント。トランザクションログからDMLおよびDDL変更レコードを解析して読み取るために必要です。
  • SQL Server fn_dblog()関数。ログリーダーが呼び出しをループして、ソースデータベースのトランザクションログファイルのアクティブな部分からログレコードを取得します。
  • SQL Server CDCテーブル: cdc.lsn_time_mapping、cdc.ddl_history、およびcdc.<
    capture instance
    >_CT。ソースデータベースでCDCが有効になっている場合、SQL ServerはこれらのテーブルをCDCスキーマに作成します。1つまたは2つのcdc.<
    capture instance
    >_CTテーブル。CDCが有効になっているソーステーブルごとに作成され、ネイティブログリーダーによってキャプチャされたDML変更を格納します。
  • CDCキャプチャインスタンステーブルリーダー。cdc.<
    capture_instance
    >_CTテーブルから変更レコードを読み取ります。
  • CDCライター。変更をターゲットに書き込みます。
次の図は、SQL Serverのログベースの変更データキャプチャコンポーネントとデータフローを示しています。
  1. ログリーダープロセスは、ログレコードを読み取り、コミットされたトランザクションのDMLおよびDDLの変更をキャプチャします。
    • トランザクションマネージャサブコンポーネントは、オープントランザクションに関連付けられたdbo.$InfaXactテーブルと対話します。
    • ログパーサーサブコンポーネントは、fn_dblog()関数の呼び出しをループして、CDCが有効になっている選択されたソーステーブルのアクティブなトランザクションログからログレコードを読み取ります。
    キャプチャプロセスは、コミットされたトランザクションが完了するか、致命的なエラーによってキャプチャプロセスが停止または中断されるか、cdc.<
    capture_instance
    >_CTテーブルからの変更レコードの読み取りへの切り替えがトリガーされるまで続行されます。
  2. 特定の状況では、一括取り込みデータベースは、CDCキャプチャインスタンステーブルリーダーを使用して、cdc.<
    capture instance
    >_CTテーブルからの変更の読み取りに自動的に切り替わります。
    以下の条件下では、処理は、cdc.<
    capture instance
    >_CTテーブルに切り替わります。
    • 開始LSNがアクティブなトランザクションログのLSNよりも前であり、cdc.<
      capture instance
      >_CTテーブル内に存在する場合、キャプチャプロセスの初期化および開始中である。
    • トランザクションログの切り詰めが発生し、データ損失が発生した。通常、SQL Serverは、オープントランザクションがdbo.$InfaXactに関連付けられている場合、ログの切り詰めを防止します。ただし、ネットワーク接続が失われるとトランザクションが終了し、ログが切り詰められる可能性があります。
      定期的なログバックアップでも、トランザクションログが切り詰められる可能性があります。データの損失を防ぐために、dbo.$InfaXactテーブルを使用するトランザクションは、アクティブなトランザクションログをロックします。
    • 行外LOBまたはプライマリ行レコードは切り詰められます。この状況では、ログリーダーはcdc.<
      capture instance
      >_CTテーブルからカラム情報を読み取ることにより、ログレコードに選択的にパッチを適用します。
      fn_dblog()関数から読み取られたレコードは、8000バイトに切り詰められます。
  3. ログリーダーとCDCキャプチャインスタンステーブルリーダーは、変更レコードをCDCライターに送信します。
  4. CDCライターは変更レコードをフォーマットし、ターゲットに適用します。

CDCテーブルのみを使用した変更キャプチャ

データベース取り込みの増分ロードジョブは、トランザクションログを使用せずにSQL Server CDCテーブルから直接変更をキャプチャできるようになりました。
CDCテーブルのみを使用する変更キャプチャ処理には、次のコンポーネントが関わります。
  • Informatica Intelligent Cloud Services Secure Agent。SQL Serverインスタンスに対してローカルまたはリモートのLinuxボックスまたはWindowsボックスで実行できます。
  • SQL Server CDCテーブル: cdc.lsn_time_mapping、cdc.ddl_history、およびcdc.<
    capture instance
    >_CT。ソースデータベースでCDCが有効になっている場合、SQL ServerはこれらのテーブルをCDCスキーマに作成します。1つまたは2つのcdc.<
    capture instance
    >_CTテーブル。CDCが有効になっているソーステーブルごとに作成され、ネイティブログリーダーによってキャプチャされたDML変更を格納します。
  • CDCキャプチャインスタンステーブルリーダー。cdc.<
    capture_instance
    >_CTテーブルから変更レコードを読み取ります。
  • CDCライター。変更をターゲットに書き込みます。
次の図は、SQL Serverのログベースの変更データキャプチャコンポーネントとデータフローを示しています。
  1. CDCキャプチャインスタンステーブルリーダーはcdcから変更を読み取ります。<
    capture instance
    >_CTテーブル内に存在する場合、キャプチャプロセスの初期化および開始中である。
  2. CDCキャプチャインスタンステーブルリーダーは変更レコードをCDCライターに送信します。
  3. CDCライターは変更レコードをフォーマットし、ターゲットに適用します。

クエリベースの変更キャプチャ

データベース取り込みジョブは、変更が発生したときに更新されるタイムスタンプカラムを照会することで、ソースにおける挿入と更新の変更をキャプチャします。ソースの設定は、各ソーステーブルへの共通CDCクエリカラムの追加に制限されます。クエリベースのCDCメソッドはクエリカラムを使用して、指定のCDC間隔の開始以降に変更された行を識別します。
クエリベースの変更キャプチャを実装するには、タスクウィザードの
[ソース]
ページで次のオプションを設定します。
  • CDCメソッド
    [クエリベースの]
    を選択して、このキャプチャメソッドを有効にします。
  • CDCクエリカラム名
    。ソーステーブルにおけるCDCクエリカラムの、大文字小文字が区別された名前です。クエリカラムでサポートされているSQL Serverデータ型は、DATETIMEとDATETIME2です。カラムはソーステーブルに存在する必要があります。
  • CDC間隔
    。クエリベースの変更データキャプチャサイクルの頻度。デフォルトは5分です。
  • 増分ロード操作の当初の開始点
    。変更キャプチャサイクルを開始するポイント。デフォルトは
    [使用可能な最新]
    です。
CDC間隔が経過した後、
一括取り込みデータベース
は、CDCクエリカラムを参照するWHERE句を含むSQLクエリを使用して、CDC間隔の間に変更を受け取った行を識別します。変更データがキャプチャされ、ターゲットに適用されます。
クエリベースのCDC用に選択されたソーステーブルにCDCクエリカラムがない場合、変更データキャプチャはこれらのテーブルを無視し、残りのテーブルで処理を続行します。スキップされたテーブルの場合、ターゲットデータベースで生成された、対応するテーブルは空になります。どのソーステーブルにもCDCクエリカラムがない場合、ジョブは実行時に失敗します。
次の図は、SQL Serverのクエリベースの変更データキャプチャコンポーネントとデータフローを示しています。
  1. CDC間隔が経過した後、
    一括取り込みデータベース
    は、CDCクエリカラムを使用して変更データを抽出するSQLクエリをソースデータベースで実行します。
  2. 変更レコードがCDCライターに送信されます。
  3. CDCライターは変更レコードをフォーマットし、ターゲットに適用します。