我在禁用CDC之前丢弃了一张桌子。现在,当我重新创建表并尝试启用CDC时,它说捕获实例已经存在。我可以使用不同的捕获实例名称,但需要知道是否还有手动删除关联的捕获实例。
当我通过SSMS GUI删除表时,它也会丢弃CDC表。但这次我使用代码删除了表,它没有禁用或删除CDC。因此麻烦。如果错误地删除了更改表,Ms文档会讨论一个热修复。但我删除了基表。有关如何删除已删除表的捕获实例的任何线索?
答案 0 :(得分:4)
以下是我在CDC中删除孤立捕获实例的步骤:
DROP FUNCTION [cdc].[fn_cdc_get_net_changes_dbo_(tablename)]
DROP FUNCTION [cdc].[fn_cdc_get_all_changes_dbo_(tablename)]
然后运行以下命令:
declare @objid int
set @objid = (select object_id from cdc.change_tables where capture_instance = 'your orphaned capture instance')
delete from cdc.index_columns where object_id = @objid
delete from cdc.captured_columns where object_id = @objid
delete from cdc.change_tables where object_id = @objid
此时您应该可以正常通过sp_cdc_enable_table重新创建捕获实例。
答案 1 :(得分:1)
嗯,我想出了办法。我从所有CDC系统表中删除了与该表相关的所有记录,并尝试重新创建具有相同名称的捕获实例。它奏效了!
答案 2 :(得分:1)
除了pdanke的REPLY之外,我还要再执行一步:
DROP TABLE cdc.<capture_insance>_CT
当我恢复已启用更改数据捕获的数据库时,我的cdc孤儿可能已经出现。就我而言,
EXECUTE sys.sp_cdc_help_change_data_capture
导致一个条目source_schema
和source_table
都是NULL
。