2009-12-03 56 views
0

在爲此禁用CDC之前,我放棄了一個表。現在,當我重新創建表並嘗試啓用CDC時,它表示捕獲實例已經存在。我可以使用不同的Capture Instance名稱,但需要知道是否有手動刪除關聯的捕獲實例。如何手動禁用CDC的表格?

當我通過SSMS GUI刪除表時,它也會丟棄CDC表。但是這次我使用代碼刪除了表,並且它沒有禁用或刪除CDC。因此麻煩。如果更改表被錯誤地刪除,Ms文檔將討論熱修復。但我已經刪除了基表。有關如何爲刪除的表刪除此捕獲實例的任何線索?

回答

1

那麼我想出了一個辦法。我從所有CDC系統表中刪除了與該表相關的所有記錄,並嘗試使用相同的名稱重新創建捕獲實例。有效!

+0

當你說所有的系統表時,你有代碼示例嗎?什麼?有同樣的問題。謝謝! – 2011-06-01 11:09:43

+0

對不起,它已經有一段時間了..不記得了。但這並不難......只需花點時間,你就會發現...... – Faiz 2011-06-03 20:31:43

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捕獲實例。

1

我不得不執行,除了答覆由pdanke一個步驟:

DROP TABLE cdc.<capture_insance>_CT 

我CDC孤兒可能已經來臨,當我恢復其中已經啓用變更數據捕獲的數據庫。就我而言,

EXECUTE sys.sp_cdc_help_change_data_capture 

導致一個條目,其中source_schemasource_table都是NULL