【问题标题】:How to disable CDC for a table manually?如何手动禁用表的 CDC?
【发布时间】:2009-12-03 08:02:30
【问题描述】:

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

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

【问题讨论】:

    标签: sql-server cdc


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 你有一个代码示例,当你说所有的系统表时?有哪些?有同样的问题。谢谢!
      • 对不起,已经有一段时间了..不记得了。但这并不难……只要花点时间,你就会明白……
      【解决方案3】:

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

      DROP TABLE cdc.<capture_insance>_CT
      

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

      EXECUTE sys.sp_cdc_help_change_data_capture 
      

      导致一个条目,其中source_schemasource_table 都是NULL

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-17
        • 2014-04-01
        • 2020-10-10
        • 1970-01-01
        • 2021-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多