我在数据库中有一个表,它正在进行更改数据捕获:
EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name = N'mytable',
@role_name = NULL,
@supports_net_changes = 1
出于性能原因,我需要重构这个表,为此我需要删除主键;所以我在做:
EXEC sys.sp_cdc_disable_table
@source_schema = N'dbo',
@source_name = 'mytable',
@capture_instance = N'dbo_mytable'
如果我检查该表是否被附加到sys.tables.is_tracked_by_cdc
中,则它显示0。
SELECT * FROM sys.tables tb
INNER JOIN sys.schemas s on s.schema_id = tb.schema_id
WHERE s.name='dbo' and tb.name='mytable'
尽管如此,当我放弃执行ALTER TABLE dbo.mytable drop constraint PK_mytable;
的主键时,我得到:
无法删除表"mytable"上的主键约束"PK_mytable",因为对表启用了更改跟踪。更改跟踪需要表上的主键约束。在删除约束之前禁用更改跟踪。
为什么服务器认为该表即使已禁用,仍在CDC之下?你知道我该怎么克服吗?
您禁用了change data capture
,但错误与change tracking
有关。尝试:
ALTER TABLE [dbo].[mytable]
DISABLE CHANGE_TRACKING;