cdc。 <capture_instance > _CT (transact-sql)cdc.<capture_instance>_CT (Transact-SQL)

適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) 適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions)

ソース テーブルに対して変更データ キャプチャを有効にすると作成される変更テーブルです。Is the change table created when change data capture is enabled on a source table. ソース テーブルに対して実行された操作が挿入や削除の場合は、各操作について 1 行を返します。ソース テーブルに対して実行された操作が更新の場合は、各操作について 2 行を返します。The table returns one row for each insert and delete operation performed against the source table, and two rows for each update operation performed against the source table. ソーステーブルが有効になっているときに変更テーブルの名前が指定されていない場合は、その名前が派生します。When the name of the change table is not specified at the time the source table is enabled, the name is derived. 名前の形式は cdc です。capture_instance_CT。 capture_instance は、ソーステーブルのスキーマ名と schema_table形式のソーステーブル名です。The format of the name is cdc.capture_instance_CT where capture_instance is the schema name of the source table and the source table name in the format schema_table. たとえば、 AdventureWorksサンプルデータベースのテーブルのユーザーが変更データキャプチャを有効にした場合、派生した変更テーブル名は cdc になります。Person_Address_CTFor example, if the table Person.Address in the AdventureWorks sample database is enabled for change data capture, the derived change table name would be cdc.Person_Address_CT.

システムテーブルに対して直接クエリを実行しないことをお勧めします。We recommend that you do not query the system tables directly. 代わりに、 cdc.fn_cdc_get_all_changes_<capture_instance> を実行し、cdc.fn_cdc_get_net_changes_<capture_instance 関数を>し ます。Instead, execute the cdc.fn_cdc_get_all_changes_<capture_instance> and cdc.fn_cdc_get_net_changes_<capture_instance> functions.

列名Column name データ型Data type 説明Description
__$start_lsn__$start_lsn binary(10)binary(10) 変更のコミット トランザクションに関連付けられたログ シーケンス番号 (LSN)。Log sequence number (LSN) associated with the commit transaction for the change.

同じトランザクションでコミットされたすべての変更は、同じコミット LSN を共有します。All changes committed in the same transaction share the same commit LSN. たとえば、ソーステーブルに対する削除操作によって2つの行が削除された場合、変更テーブルには、同じ __ $ start_lsn 値を持つ2つの行が含まれます。For example, if a delete operation on the source table removes two rows, the change table will contain two rows, each with the same __$start_lsn value.
__ $ end_lsn__$end_lsn binary(10)binary(10) 単に情報を示すためだけに特定されます。Identified for informational purposes only. サポートされていません。Not supported. 将来の互換性は保証されません。Future compatibility is not guaranteed.

SQL Server 2012 (11.x)SQL Server 2012 (11.x) は、この列は常に NULL です。In SQL Server 2012 (11.x)SQL Server 2012 (11.x), this column is always NULL.
__$seqval__$seqval binary(10)binary(10) トランザクション内の行の変更を並べ替えるために使用されるシーケンス値。Sequence value used to order the row changes within a transaction.
__$operation__$operation intint 変更に関連付けられているデータ操作言語 (DML) 操作を識別します。Identifies the data manipulation language (DML) operation associated with the change. 以下のいずれかを指定できます。Can be one of the following:

1 = 削除1 = delete

2 = 挿入2 = insert

3 = 更新 (古い値)3 = update (old values)

列データには、更新ステートメントを実行する前の行の値が割り当てられます。Column data has row values before executing the update statement.

4 = 更新 (新しい値)4 = update (new values)

列データには、更新ステートメントを実行した後の行の値が割り当てられます。Column data has row values after executing the update statement.
__$update_mask__$update_mask varbinary (128)varbinary(128) 変更された列を識別する、変更テーブルの列序数に基づくビットマスク。A bit mask based upon the column ordinals of the change table identifying those columns that changed.
<captured source table columns> 多様varies 変更テーブルの残りの列は、キャプチャインスタンスの作成時にキャプチャされた列として識別された、ソーステーブルの列です。The remaining columns in the change table are the columns from the source table that were identified as captured columns when the capture instance was created. キャプチャ対象列リストで列が指定されなかった場合、ソース テーブルのすべての列がこのテーブルに格納されます。If no columns were specified in the captured column list, all columns in the source table are included in this table.
__ $ command_id__$command_id intint トランザクション内の操作の順序を追跡します。Tracks the order of operations within a transaction.

注釈Remarks

列の列は、 __$command_id バージョン2012から2016の累積的な更新プログラムで導入されました。The __$command_id column was column was introduced in a cumulative update in versions 2012 through 2016. バージョンおよびダウンロードの情報については、 Microsoft SQL Server データベースに対して変更データキャプチャを有効にした後に、更新された行の変更テーブルの順序が正しく設定され3030352ていないことを確認してください。For version and download information, see KB article 3030352 at FIX: The change table is ordered incorrectly for updated rows after you enable change data capture for a Microsoft SQL Server database. 詳細については、 SQL Server 2012、2014、2016の最新の CU にアップグレードした後に、CDC の機能が停止する場合があります。For more information, see CDC functionality may break after upgrading to the latest CU for SQL Server 2012, 2014 and 2016.

キャプチャされた列のデータ型Captured Column Data Types

このテーブルに含まれるキャプチャ対象の列のデータ型と値は、対応するソース列と同じですが、次の例外があります。Captured columns included in this table have the same data type and value as their corresponding source columns with the following exceptions:

  • Timestamp 列は binary (8) として定義されます。Timestamp columns are defined as binary(8).

  • Id 列は、 int または bigintとして定義されます。Identity columns are defined as either int or bigint.

ただし、これらの列の値は、基になる列の値と同じです。However, the values in these columns are the same as the source column values.

ラージ オブジェクト データ型Large Object Data Types

__ $ Operation = 1 またtextimage ntext NULL _ _ $operation = 3 の場合、データ型 image、Text、および ntext の列には常に NULL 値が割り当てられます。Columns of data type image, text, and ntext are always assigned a NULL value when __$operation = 1 or __$operation = 3. データ型varbinary (max)varchar (max)、またはnvarchar (max) の列には、 NULL _ _ 更新中に列が変更されていない限り、$operation が3の場合、NULL 値が割り当てられます。Columns of data type varbinary(max), varchar(max), or nvarchar(max) are assigned a NULL value when __$operation = 3 unless the column changed during the update. _ _ $Operation = 1 の場合、これらの列には削除時に値が割り当てられます。When __$operation = 1, these columns are assigned their value at the time of the delete. キャプチャインスタンスに含まれる計算列の値は、常に NULLになります。Computed columns that are included in a capture instance always have a value of NULL.

既定では、INSERT、UPDATE、WRITETEXT、または UPDATETEXT の 1 回のステートメントでキャプチャ対象列に追加できる最大サイズは、65,536 バイト (64 KB) です。By default, the maximum size that can be added to a captured column in a single INSERT, UPDATE, WRITETEXT, or UPDATETEXT statement is 65,536 bytes or 64 KB. 大きな LOB データをサポートするためにこのサイズを大きくするには、 max text repl Size サーバー構成オプション を使用して、より大きな最大サイズを指定します。To increase this size to support larger LOB data, use the Configure the max text repl size Server Configuration Option to specify a larger maximum size. 詳細については、「 max text repl size サーバー構成オプションの構成」を参照してください。For more information, see Configure the max text repl size Server Configuration Option.

データ定義言語の変更Data Definition Language Modifications

列の追加や削除など、ソーステーブルに対する DDL の変更は、 cdc.ddl_history テーブルに記録されます。DDL modifications to the source table, such as adding or dropping columns, are recorded in the cdc.ddl_history table. これらの変更は変更テーブルに適用されません。These changes are not applied to the change table. つまり、変更テーブルの定義は一定のままです。That is, the definition of the change table remains constant. ソース テーブルには、キャプチャ対象列リストが関連付けられていますが、キャプチャ プロセスで変更テーブルに行を挿入する際、そのリストに存在しない列は無視されます。When inserting rows into the change table, the capture process ignores those columns that do not appear in the captured column list associated with the source table. キャプチャ対象列リストに指定されていた列が、ソース テーブルから既に削除されていた場合、その列には NULL 値が割り当てられます。If a column appears in the captured column list that is no longer in the source table, the column is assigned a null value.

ソーステーブル内の列のデータ型を変更すると、 cdc.ddl_history テーブルにも記録されます。Changing the data type of a column in the source table is also recorded in the cdc.ddl_history table. ただし、この変更によって、変更テーブルの定義が修正されることはありません。However, this change does alter the definition of the change table. ソース テーブルに対する DDL 変更のログ レコードがキャプチャ プロセスで見つかった場合は、変更テーブルにおけるキャプチャ対象列のデータ型が変更されます。The data type of the captured column in the change table is modified when the capture process encounters the log record for the DDL change made to the source table.

ソーステーブル内のキャプチャされた列のデータ型を、データ型のサイズが小さくなるように変更する必要がある場合は、次の手順を実行して、変更テーブル内の同等の列が正常に変更されるようにします。If you need to modify the data type of a captured column in the source table in a way that decreases the size of the data type, use the following procedure to ensure that the equivalent column in the change table can be successfully modified.

  1. ソース テーブルで、変更する列の値を、変更後のデータ型に収まるように更新します。In the source table, update the values in the column to be modified to fit into the planned data type size. たとえば、データ型を int から smallintに変更する場合は、値を smallint の範囲に収まる-32768 から32767に更新します。For example, if you change the data type from int to smallint, update the values to a size that fits in the smallint range, -32,768 to 32,767.

  2. 変更テーブルで、同等の列に対して同じ更新操作を実行します。In the change table, perform the same update operation to the equivalent column.

  3. ソース テーブル側で新しいデータ型を指定します。Alter the source table by specifying the new data type. データ型の変更は、変更テーブルに正常に反映されます。The data type change is propagated successfully to the change table.

データ操作言語の変更Data Manipulation Language Modifications

変更データキャプチャが有効になっているソーステーブルに対して挿入、更新、および削除の操作を実行すると、それらの DML 操作のレコードがデータベーストランザクションログに記録されます。When insert, update, and delete operations are performed on a change data capture enabled source table, a record of those DML operations appears in the database transaction log. 変更データキャプチャプロセスでは、これらの変更に関する情報をトランザクションログから取得し、変更を記録するために1つまたは2つの行を変更テーブルに追加します。The change data capture process retrieves information about those changes from the transaction log, and adds either one or two rows to the change table to record the change. エントリは、ソース テーブルでコミットされたときと同じ順序で変更テーブルに追加されますが、変更テーブルのエントリのコミットは通常 1 つのエントリではなく変更のグループに対して実行される必要があります。Entries are added to the change table in the same order that they were committed to the source table, although the commit of change table entries must typically be performed on a group of changes instead of for a single entry.

変更テーブルエントリ内では、 __ $ start_lsn 列を使用して、ソーステーブルへの変更に関連付けられているコミット lsn を記録し、 __ $ seqval 列 を使用してそのトランザクション内の変更を順序付けします。Within the change table entry, the __$start_lsn column is used to record the commit LSN that is associated with the change to the source table, and the __$seqval column is used to order the change within its transaction. これらのメタデータ列を一緒に使用して、ソースの変更のコミット順序が維持されるようにすることができます。Together, these metadata columns can be used to make sure that the commit order of the source changes is preserved. キャプチャプロセスではトランザクションログから変更情報を取得するため、変更テーブルのエントリは、対応するソーステーブルの変更と同期して表示されないことに注意する必要があります。Because the capture process obtains its change information from the transaction log, it is important to note that change table entries do not appear synchronously with their corresponding source table changes. 代わりに、キャプチャ プロセスがトランザクション ログから関連の変更エントリを処理した後、対応する変更が非同期で表示されます。Instead, corresponding changes appear asynchronously, after the capture process has processed the relevant change entries from the transaction log.

挿入操作と削除操作については、更新マスクのすべてのビットが設定されます。For insert and delete operations, all the bits in the update mask are set. 更新操作の場合、更新中に変更された列を反映するように、update old 行と update new 行の両方の更新マスクが変更されます。For update operations, the update mask in both the update old and update new rows will be modified to reflect the columns that changed during update.

参照See Also

sys.sp_cdc_enable_table (Transact-sql) sys.sp_cdc_enable_table (Transact-SQL)
sys.sp_cdc_get_ddl_history (Transact-sql)sys.sp_cdc_get_ddl_history (Transact-SQL)