如何在新添加的基础表列上激活更改数据捕获(CDC),而不禁用CDC

Moh*_*han 3 sql sql-server cdc

我有一个要求,我想在新添加的表列上启用CDC,但我无法禁用CDC并再次启用它.有什么办法可以实现吗?

我找到了一个解决方案,我可以将旧的CDC表值复制到临时表中,然后禁用CDC,然后使用新的表模式启用CDC.稍后将临时表值复制到新的CDC表中并更新LSN值.

而不是上面我需要一个解决方案,我可以在CDC启用时将新列包含在CDC表中.

Bac*_*cks 7

CDC支持两个捕获表实例.因此,您可以执行以下步骤:

  1. 添加新列
  2. 添加新的cdc-capture inctance
  3. 将数据从旧表移动到新表
  4. 禁用旧的cdc实例

此解决方案可防止您停止收集更改,并且不会丢失数据.

EXEC sp_cdc_enable_table
    @source_schema = N'common',
    @source_name = N'EntityTypes',
    @role_name = NULL,
    @filegroup_name = N'CDC',
    @capture_instance = 'common_EntityTypes'


ALTER TABLE common.EntityTypes
    ADD TestColumn int

EXEC sp_cdc_enable_table
    @source_schema = N'common',
    @source_name = N'EntityTypes',
    @role_name = NULL,
    @filegroup_name = N'CDC',
    @capture_instance = 'common_EntityTypes2'

INSERT INTO cdc.common_EntityTypes2_CT
(__$start_lsn, __$end_lsn,__$seqval,__$operation,__$update_mask,Id,Name)
SELECT
    __$start_lsn, 
    __$end_lsn,
    __$seqval,
    __$operation,
    __$update_mask,
    Id,
    Name
FROM cdc.common_EntityTypes_CT

EXEC sp_cdc_disable_table
    @source_schema = N'common',
    @source_name = N'EntityTypes',
    @capture_instance = 'common_EntityTypes'
Run Code Online (Sandbox Code Playgroud)