この手順では、CDC 状態が格納されるパッケージ変数を定義する方法について説明します。
CDC 状態変数は CDC 制御タスクによって読み込まれ、初期化され、更新され、CDC ソース データ フロー コンポーネントによって変更レコードの現在の処理範囲を決定するために使用されます。 CDC 状態変数は、CDC 制御タスクと CDC ソースに共通の任意のコンテナーで定義できます。 これはパッケージ レベルでもかまいませんが、ループ コンテナーなどの他のコンテナー上にある場合もあります。
CDC 状態変数の値を手動で変更することはお勧めしませんが、その内容を理解すると便利な場合があります。
次の表に、CDC 状態変数値のコンポーネントの概要を示します。
| コンポーネント | 説明 |
|---|---|
<state-name> |
これは、現在の CDC 状態の名前です。 |
CS |
これにより、現在の処理範囲の開始点 (現在の開始) がマークされます。 |
<cs-lsn> |
これは、前回の CDC 実行で処理された最後の (ログ シーケンス番号) LSN です。 |
CE |
これにより、現在の処理範囲の終点 (Current End) がマークされます。 CDC 状態での CE コンポーネントの存在は、CDC パッケージが現在処理中であるか、CDC 処理範囲を完全に処理する前に CDC パッケージが失敗したことを示しています。 |
<ce-lsn> |
これは、現在の CDC 実行で処理される最後の LSN です。 処理される最後のシーケンス番号は常に最大値 (0xFFF...) であると見なされます。 |
IR |
これにより、初期処理範囲がマークされます。 |
<ir-start> |
これは、最初の読み込みが開始される直前の変更の LSN です。 |
<ir-end> |
これは、最初の読み込みが終了した直後の変更の LSN です。 |
TS |
これにより、最後の CDC 状態更新のタイムスタンプがマークされます。 |
| <タイムスタンプ> | これは、64 ビットの System.DateTime.UtcNow プロパティの 10 進表現です。 |
ER |
これは、最後の操作が失敗したときに表示され、エラーの原因の簡単な説明が含まれています。 このコンポーネントが存在する場合は、常に最後に表示されます。 |
<short-error-text> |
これは簡単なエラーの説明です。 |
LSN とシーケンス番号はそれぞれ、Binary(10) の LSN 値を表す最大 20 桁の 16 進数文字列としてエンコードされます。
次の表では、使用可能な CDC 状態の値について説明します。
| 状態 | 説明 |
|---|---|
| (INITIAL) | これは、現在の CDC グループでパッケージが実行される前の初期状態です。 CDC 状態が空のときの状態でもあります。 |
| ILSTART (初期読み込み開始) | これは、CDC 制御タスクに対する MarkInitialLoadStart 操作の呼び出し後に、初期読み込みパッケージが開始されたときの状態です。 |
| ILEND (初期読み込み終了) | これは、CDC 制御タスクに対する MarkInitialLoadEnd 操作の呼び出し後に、初期読み込みパッケージが正常に終了したときの状態です。 |
| ILUPDATE (初期ロード更新) | これは、初期の処理範囲を処理しながら、初期読み込みに続くトリクル フィード更新パッケージの実行の状態です。 これは、CDC 制御タスクに対する GetProcessingRange 操作の呼び出しの後です。__$reprocessing 列を使用する場合は、パッケージが既にターゲットにある行を再処理している可能性があることを示すために 1 に設定されます。 |
| TFEND (Trickle-Feed 更新が終了しました) | 定期的な CDC の実行で期待される状態です。 前の実行が正常に完了していることと、新しい実行を新しい処理範囲で開始できることを表します。 |
| TFSTART | これは、CDC 制御タスクに対する GetProcessingRange 操作の呼び出し後の、トリクル フィード更新パッケージの初回以外の実行の状態です。これは、通常の CDC 実行が開始されているが、完了していないか、正しく完了していないことを示します ( MarkProcessedRange)。 |
| TFREDO (Trickle-Feed 更新プログラムの再処理) | これは、TFSTART の後に発生する GetProcessingRange の状態です。 前の実行が正常に完了しなかったことを表します。__$reprocessing 列を使用する場合は、パッケージが既にターゲットにある行を再処理している可能性があることを示すために 1 に設定されます。 |
| エラー | CDC グループはエラー状態です。 |
CDC 状態変数の値の例を次に示します。
ILSTART/IR/0x0000162B158700000000//TS/2011-08-07T17:10:43.0031645/
ILSTART/IR/0x0000162B158700000000//TS/2011-08-07T17:10:43.0031645/
TFEND/CS/0x0000025B000001BC0003/TS/2011-07-17T12:05:58.1001145/
TFSTART/CS/0x0000030D000000AE0003/CE/0x0000159D1E0F01000000/TS/2011-08-09T05:30:43.9344900/
TFREDO/CS/0x0000030D000000AE0003/CE/0x0000159D1E0F01000000/TS/2011-08-09T05:30:59.5544900/
CDC 状態変数を定義するには
SQL Server Data Tools で、変数を定義する必要がある CDC フローを含む SQL Server 2014 Integration Services (SSIS) パッケージを開きます。
[ パッケージ エクスプローラー ] タブをクリックし、新しい変数を追加します。
変数に、状態変数として認識できる名前を付けます。
変数に 文字列 データ型を指定します。
変数には、その定義の一部として値を指定しないでください。 値は CDC 制御タスクによって設定する必要があります。
自動状態永続化で CDC 制御タスクを使用する予定の場合、CDC 状態変数は指定したデータベース状態テーブルから読み取られ、値が変更されると同じテーブルに更新されます。 State テーブルの詳細については、「 CDC コントロール タスク」および「 CDC コントロール タスク エディター」を参照してください。
自動状態永続化で CDC 制御タスクを使用していない場合は、パッケージが最後に実行されたときに値が保存された永続ストレージから変数値を読み込み、現在の処理範囲の処理が完了したときに永続ストレージに書き戻す必要があります。