无法从具有 CDC 的表中删除主键,即使它已禁用

  • 本文关键字:删除 CDC sql-server
  • 更新时间 :
  • 英文 :


我在数据库中有一个表,它正在进行更改数据捕获:

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;  

最新更新