Как вручную отключить CDC для таблицы? - PullRequest
1 голос
/ 03 декабря 2009

Я сбросил таблицу, прежде чем отключить CDC для этого. Теперь, когда я воссоздаю таблицу и пытаюсь включить CDC, он говорит, что экземпляр захвата уже существует. Я могу использовать другое имя экземпляра захвата, но мне нужно знать, есть ли возможность удалить связанный экземпляр захвата вручную.

Когда я удаляю таблицу через SSMS GUI, она также удаляет таблицы CDC. Но на этот раз я удалил таблицу с помощью кода, и он не отключил и не удалил CDC. Отсюда и беда. В документации Ms говорится об оперативном исправлении, если таблица изменений удалена по ошибке. Но я удалил базовую таблицу. Любые подсказки о том, как удалить этот экземпляр захвата для удаленной таблицы?

Ответы [ 3 ]

4 голосов
/ 03 апреля 2012

Вот шаги, которые я предпринял, чтобы удалить потерянный экземпляр захвата в 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 голос
/ 15 марта 2013

Мне пришлось выполнить еще один шаг в дополнение к ОТВЕТУ от pdanke:

DROP TABLE cdc.<capture_insance>_CT

Мой cdc-сирота мог появиться, когда я восстановил базу данных, в которой был включен сбор данных изменений. В моем случае

EXECUTE sys.sp_cdc_help_change_data_capture 

привело к одной записи, где source_schema и source_table были оба NULL.

1 голос
/ 06 декабря 2009

Ну, я нашел способ. Я удалил все записи, относящиеся к этой таблице, из всех системных таблиц CDC и попытался воссоздать экземпляр захвата с тем же именем. Это сработало!

...