1

在为此禁用 CDC 之前,我删除了一个表。现在,当我重新创建表并尝试启用 CDC 时,它说捕获实例已经存在。我可以使用不同的捕获实例名称,但需要知道是否可以手动删除关联的捕获实例。

当我通过 SSMS GUI 删除表时,它也会删除 CDC 表。但是这次我使用代码删除了表格,它没有禁用或删除 CDC。因此麻烦。如果更改表被错误地删除,Ms 文档讨论了一个热修复。但我已经删除了基表。有关如何删除已删除表的此捕获实例的任何线索?

4

3 回答 3

7

以下是我在 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 重新创建您的捕获实例。

于 2012-04-03T15:56:59.667 回答
2

嗯,我想出了一个办法。我从所有 CDC 系统表中删除了与该表相关的所有记录,并尝试重新创建具有相同名称的捕获实例。有效!

于 2009-12-06T08:53:19.693 回答
2

除了 pdanke 的回复之外,我还必须执行一个步骤:

DROP TABLE cdc.<capture_insance>_CT

我的 cdc 孤儿可能是在我恢复启用了更改数据捕获的数据库时出现的。就我而言,

EXECUTE sys.sp_cdc_help_change_data_capture 

导致一个条目 wheresource_schemasource_tableare both NULL

于 2013-03-14T20:00:30.300 回答