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

適用対象: ○SQL Server XAzure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

現在のデータベース内の指定したソース テーブルを対象に変更データ キャプチャを有効にします。Enables change data capture for the specified source table in the current database. テーブルに対して変更データ キャプチャが有効の場合は、テーブルに適用される各データ操作言語 (DML) 操作の記録がトランザクション ログに書き込まれます。When a table is enabled for change data capture, a record of each data manipulation language (DML) operation applied to the table is written to the transaction log. 変更データ キャプチャのプロセスはログからこの情報を取得し、一連の関数を使用してアクセスできる変更テーブルに書き込みます。The change data capture process retrieves this information from the log and writes it to change tables that are accessed by using a set of functions.

変更データ キャプチャは、 MicrosoftMicrosoftSQL ServerSQL Serverのすべてのエディッションで使用できるわけではありません。Change data capture is not available in every edition of MicrosoftMicrosoftSQL ServerSQL Server. SQL ServerSQL Serverの各エディションでサポートされる機能の一覧については、「 SQL Server 2016 の各エディションがサポートする機能」を参照してください。For a list of features that are supported by the editions of SQL ServerSQL Server, see Features Supported by the Editions of SQL Server 2016.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

  
sys.sp_cdc_enable_table   
  [ @source_schema = ] 'source_schema',   
  [ @source_name = ] 'source_name' ,  [,[ @capture_instance = ] 'capture_instance' ]  
  [,[ @supports_net_changes = ] supports_net_changes ]  
  , [ @role_name = ] 'role_name'  
  [,[ @index_name = ] 'index_name' ]  
  [,[ @captured_column_list = ] 'captured_column_list' ]  
  [,[ @filegroup_name = ] 'filegroup_name' ]  
  [,[ @allow_partition_switch = ] 'allow_partition_switch' ]  
  [;]  

引数Arguments

[ @source_schema = ] 'source_schema' ソース テーブルが所属するスキーマの名前です。[ @source_schema = ] 'source_schema' Is the name of the schema in which the source table belongs. source_schemasysname、既定値はありません、NULL にすることはできません。source_schema is sysname, with no default, and cannot be NULL.

[ @source_name = ] 'source_name' 変更データ キャプチャを有効にするソース テーブルの名前です。[ @source_name = ] 'source_name' Is the name of the source table on which to enable change data capture. source_namesysname、既定値はありません、NULL にすることはできません。source_name is sysname, with no default, and cannot be NULL.

source_name現在のデータベースに存在する必要があります。source_name must exist in the current database. 内のテーブル、 cdcスキーマは変更データ キャプチャを有効にすることはできません。Tables in the cdc schema cannot be enabled for change data capture.

[ @role_name = ] 'role_name' 変更データへのアクセスに使用するデータベース ロールの名前です。[ @role_name = ] 'role_name' Is the name of the database role used to gate access to change data. role_namesysnameと指定する必要があります。role_name is sysname and must be specified. 明示的に NULL に設定した場合、変更データへのアクセスを制限する際にゲーティング ロールは使用されません。If explicitly set to NULL, no gating role is used to limit access to the change data.

役割が現在存在する場合に使用されます。If the role currently exists, it is used. 指定されたロールが存在しない場合は、その名前でデータベース ロールの作成が試行されます。If the role does not exist, an attempt is made to create a database role with the specified name. ロール名は文字列の右側にある空白のロールを作成する前に切り捨てられます。The role name is trimmed of white space at the right of the string before attempting to create the role. 呼び出し元がデータベース内でロールを作成する権限がない場合、ストアド プロシージャの操作は失敗します。If the caller is not authorized to create a role within the database, the stored procedure operation fails.

[ @capture_instance = ] 'capture_instance' 名前のインスタンスに固有の変更データ キャプチャ オブジェクトに使用されるキャプチャ インスタンスの名前です。[ @capture_instance = ] 'capture_instance' Is the name of the capture instance used to name instance-specific change data capture objects. capture_instancesysname NULL にすることはできません。capture_instance is sysname and cannot be NULL.

名前が、ソース スキーマ名の形式でソース テーブル名から派生した指定しない場合、 schemaname_sourcenameします。If not specified, the name is derived from the source schema name plus the source table name in the format schemaname_sourcename. capture_instance 100 文字を超えることはできませんし、データベース内で一意である必要があります。capture_instance cannot exceed 100 characters and must be unique within the database. 指定されたか、派生capture_instance文字列の右側にある空白は切り捨てられます。Whether specified or derived, capture_instance is trimmed of any white space to the right of the string.

ソース テーブルには、2 つのキャプチャ インスタンスの最大数を持つことができます。A source table can have a maximum of two capture instances. 詳細については、「 sys.sp_cdc_help_change_data_capture (TRANSACT-SQL)します。For more information see, sys.sp_cdc_help_change_data_capture (Transact-SQL).

[ @supports_net_changes = ] supports_net_changes 示すかどうかをこのキャプチャ インスタンスに対して有効にするには差分変更クエリをサポートします。[ @supports_net_changes = ] supports_net_changes Indicates whether support for querying for net changes is to be enabled for this capture instance. supports_net_changesビット、既定値は、テーブルに主キーまたはテーブルに一意のインデックスを使用して識別されている場合は 1、@index_nameパラメーター。supports_net_changes is bit with a default of 1 if the table has a primary key or the table has a unique index that has been identified by using the @index_name parameter. それ以外の場合、既定値は 0 になります。Otherwise, the parameter defaults to 0.

0 の場合は、すべての変更を照会するサポート関数のみが生成されます。If 0, only the support functions to query for all changes are generated.

1 の場合、差分変更のクエリに必要な関数も生成されます。If 1, the functions that are needed to query for net changes are also generated.

場合supports_net_changesを 1 に設定されているindex_name指定する必要がありますか、ソース テーブルは主キーが定義されている必要があります。If supports_net_changes is set to 1, index_name must be specified, or the source table must have a defined primary key.

[ @index_name = ] 'index_name_' 使用して、ソース テーブル内の行を一意に識別する一意のインデックスの名前。[ @index_name = ] 'index_name_' The name of a unique index to use to uniquely identify rows in the source table. index_namesysname NULL にすることができます。index_name is sysname and can be NULL. 指定した場合index_nameソース テーブルに一意のインデックスを有効にする必要があります。If specified, index_name must be a valid unique index on the source table. 場合index_nameインデックス列よりも優先、定義された主キー列、テーブルの一意の行識別子として指定します。If index_name is specified, the identified index columns takes precedence over any defined primary key columns as the unique row identifier for the table.

[ @captured_column_list = ] 'captured_column_list' 変更テーブルに含まれるソース テーブルの列を識別します。[ @captured_column_list = ] 'captured_column_list' Identifies the source table columns that are to be included in the change table. captured_column_listnvarchar (max) NULL にすることができます。captured_column_list is nvarchar(max) and can be NULL. NULL の場合、すべての列が変更テーブルに追加されます。If NULL, all columns are included in the change table.

列名は、ソース テーブルの有効な列である必要があります。Column names must be valid columns in the source table. 主キー インデックスで定義された列または列によって参照されるインデックスで定義されているindex_name含める必要があります。Columns defined in a primary key index, or columns defined in an index referenced by index_name must be included.

captured_column_listは列名のコンマ区切りのリスト。captured_column_list is a comma-separated list of column names. 二重引用符を使用して、リスト内の個々 の列名できます必要に応じて引用符で囲む ("") または角かっこ ()。Individual column names within the list can be optionally quoted by using either double quotation marks ("") or square brackets ([]). 列名には、埋め込みのコンマが含まれている、列名が引用符で囲まれたする必要があります。If a column name contains an embedded comma, the column name must be quoted.

captured_column_list次の予約済みの列名を含めることはできません: _ _ $start_lsn_ _ $end_lsn_ _ $$seqval_ _ $操作、および _ _ $update_maskします。captured_column_list cannot contain the following reserved column names: __$start_lsn, __$end_lsn, __$seqval, __$operation, and __$update_mask.

[ @filegroup_name = ] 'filegroup_name' キャプチャ インスタンスの作成、変更テーブルに使用するファイル グループです。[ @filegroup_name = ] 'filegroup_name' Is the filegroup to be used for the change table created for the capture instance. filegroup_namesysname NULL にすることができます。filegroup_name is sysname and can be NULL. 指定した場合filegroup_name現在のデータベースを定義する必要があります。If specified, filegroup_name must be defined for the current database. NULL の場合、既定のファイル グループが使用されます。If NULL, the default filegroup is used.

変更データ キャプチャの変更テーブル用に、別個のファイル グループを作成することをお勧めします。We recommend creating a separate filegroup for change data capture change tables.

[ @allow_partition_switch = ] 'allow_partition_switch' 変更データ キャプチャが有効になっているテーブルに対して ALTER TABLE の SWITCH PARTITION コマンドを実行できるかどうかを示します。[ @allow_partition_switch = ] 'allow_partition_switch' Indicates whether the SWITCH PARTITION command of ALTER TABLE can be executed against a table that is enabled for change data capture. allow_partition_switchビット、既定値は 1 です。allow_partition_switch is bit, with a default of 1.

テーブルのパーティション分割されていない場合、切り替え設定は常に 1、および実際の設定は無視されます。For nonpartitioned tables, the switch setting is always 1, and the actual setting is ignored. 非パーティション テーブルで切り替え設定を明示的に 0 に設定すると、切り替え設定が無視されたことを示す警告 22857 が生成されます。If the switch is explicitly set to 0 for a nonpartitioned table, warning 22857 is issued to indicate that the switch setting has been ignored. パーティション テーブルで切り替え設定を明示的に 0 に設定すると、ソース テーブルに対するパーティションの切り替え操作が許可されなくなることを示す警告 22356 が生成されます。If the switch is explicitly set to 0 for a partitioned table, the warning 22356 is issued to indicate that partition switch operations on the source table will be disallowed. 最後に、パーティションの切り替えをブロックしないことを示す場合は、切り替え設定は 1 または 1 の既定値を明示的に設定するか、有効になっているテーブルがパーティション分割、警告 22855 が発行されます。Finally, if the switch setting is either set explicitly to 1 or allowed to default to 1 and the enabled table is partitioned, warning 22855 is issued to indicate that partition switches will not be blocked. すべてのパーティションの切り替えが発生した場合、変更データ キャプチャには、スイッチによって生じた変更は記録されません。If any partition switches occur, change data capture will not track the changes resulting from the switch. 変更データが使用されるときに、データの不整合になります。This will cause data inconsistencies when the change data is consumed.

重要

SWITCH PARTITION はメタデータの操作ですが、データ変更を伴います。SWITCH PARTITION is a metadata operation, but it causes data changes. 変更データには、この操作に関連付けられている変更は保存されていないデータは、変更テーブルをキャプチャします。The data changes that are associated with this operation are not captured in the change data capture change tables. 3 つのパーティションを持つテーブルを検討し、このテーブルに変更します。Consider a table that has three partitions, and changes are made to this table. キャプチャ プロセスでは、このテーブルに対して実行されるユーザーの挿入操作、更新操作、および削除操作を追跡します。The capture process will track user insert, update, and delete operations that are executed against the table. ただし、パーティションが別のテーブルに切り替えられた場合 (一括削除の実行など)、この操作の一部として移動された行は、変更テーブルには削除された行としてキャプチャされません。However, if a partition is switched out to another table (for example, to perform a bulk delete), the rows that were moved as part of this operation will not be captured as deleted rows in the change table. 同様に、既に行が作成されている新しいパーティションがテーブルに追加された場合、これらの行は変更テーブルには反映されません。Similarly, if a new partition that has prepopulated rows is added to the table, these rows will not be reflected in the change table. このため、変更がアプリケーションで使用され、変更先に適用されると、データの不整合が生じる可能性があります。This can cause data inconsistency when the changes are consumed by an application and applied to a destination.

リターン コードの値Return Code Values

0 (成功) または1 (失敗)0 (success) or 1 (failure)

結果セットResult Sets

なしNone

コメントRemarks

変更データ キャプチャのテーブルで有効にする前に、データベースを有効にする必要があります。Before you can enable a table for change data capture, the database must be enabled. データベースで変更データ キャプチャが有効かどうかを確認するのには、クエリ、 is_cdc_enabled内の列、 sys.databasesカタログ ビューです。To determine whether the database is enabled for change data capture, query the is_cdc_enabled column in the sys.databases catalog view. データベースを有効にするには使用、 sys.sp_cdc_enable_dbストアド プロシージャ。To enable the database, use the sys.sp_cdc_enable_db stored procedure.

テーブルに対して変更データ キャプチャを有効にすると、変更テーブルと 1 つまたは 2 つのクエリ関数が生成されます。When change data capture is enabled for a table, a change table and one or two query functions are generated. 変更テーブルは、キャプチャ プロセスによってトランザクション ログから抽出されたソース テーブルの変更に関するリポジトリとして機能します。The change table serves as a repository for the source table changes extracted from the transaction log by the capture process. クエリ関数は、変更テーブルからデータを抽出に使用されます。The query functions are used to extract data from the change table. これらの関数の名前がから派生した、 capture_instance次の方法でパラメーター。The names of these functions are derived from the capture_instance parameter in the following ways:

  • すべての変更関数: cdc.fn_cdc_get_all_changes_ < capture_instance >All changes function: cdc.fn_cdc_get_all_changes_<capture_instance>

  • 差分変更関数: cdc.fn_cdc_get_net_changes_ < capture_instance >Net changes function: cdc.fn_cdc_get_net_changes_<capture_instance>

sys.sp_cdc_enable_tableソース テーブルが変更データ キャプチャを有効にするデータベース内の最初のテーブルおよびデータベースのトランザクション パブリケーションが存在しない場合も、データベースのキャプチャとクリーンアップ ジョブを作成します。sys.sp_cdc_enable_table also creates the capture and cleanup jobs for the database if the source table is the first table in the database to be enabled for change data capture and no transactional publications exist for the database. 設定、 is_tracked_by_cdc内の列、 sys.tablesカタログ ビューを 1 にします。It sets the is_tracked_by_cdc column in the sys.tables catalog view to 1.

注意

テーブルで変更データ キャプチャが有効になっている場合、SQL ServerSQL Server エージェントが実行されている必要はありません。SQL ServerSQL Server Agent does not have to be running when change data capture is enabled for a table. ただし、キャプチャ プロセスがトランザクション ログの処理されず、しない限り、変更テーブルにエントリを書き込むSQL ServerSQL Serverエージェントが実行されています。However, the capture process will not process the transaction log and write entries to the change table unless SQL ServerSQL Server Agent is running.

アクセス許可Permissions

メンバーシップが必要です、 db_owner固定データベース ロール。Requires membership in the db_owner fixed database role.

使用例Examples

A.A. 必要なパラメーターのみを指定することで変更データ キャプチャを有効にします。Enabling change data capture by specifying only required parameters

次の例では変更データ キャプチャをHumanResources.Employeeテーブル。The following example enables change data capture for the HumanResources.Employee table. 必要なパラメーターのみが指定されます。Only the required parameters are specified.

USE AdventureWorks2012;  
GO  
EXECUTE sys.sp_cdc_enable_table  
    @source_schema = N'HumanResources'  
  , @source_name = N'Employee'  
  , @role_name = N'cdc_Admin';  
GO  

B.B. 追加のオプション パラメーターを指定することで変更データ キャプチャを有効にします。Enabling change data capture by specifying additional optional parameters

次の例では変更データ キャプチャをHumanResources.Departmentテーブル。The following example enables change data capture for the HumanResources.Department table. 除くすべてのパラメーター@allow_partition_switchが指定されています。All parameters except @allow_partition_switch are specified.

USE AdventureWorks2012;  
GO  
EXEC sys.sp_cdc_enable_table  
    @source_schema = N'HumanResources'  
  , @source_name = N'Department'  
  , @role_name = N'cdc_admin'  
  , @capture_instance = N'HR_Department'   
  , @supports_net_changes = 1  
  , @index_name = N'AK_Department_Name'   
  , @captured_column_list = N'DepartmentID, Name, GroupName'   
  , @filegroup_name = N'PRIMARY';  
GO  

関連項目See Also

sys.sp_cdc_disable_table (TRANSACT-SQL) sys.sp_cdc_disable_table (Transact-SQL)
sys.sp_cdc_help_change_data_capture (TRANSACT-SQL) sys.sp_cdc_help_change_data_capture (Transact-SQL)
cdc.fn_cdc_get_all_changes_<capture_instance> (TRANSACT-SQL) cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL)
cdc.fn_cdc_get_net_changes_<capture_instance> (TRANSACT-SQL) cdc.fn_cdc_get_net_changes_<capture_instance> (Transact-SQL)
sys.sp_cdc_help_jobs (TRANSACT-SQL)sys.sp_cdc_help_jobs (Transact-SQL)