SQL Server 2008 CDC не отвечает и зависает после удаления таблицы - PullRequest
1 голос
/ 02 ноября 2010

Я тестировал функцию сбора данных об изменениях в SQL Server 2008 для таблицы, когда она застряла.

  • Для CDC включена только одна таблица.
  • После внесения различных изменений DDL в таблицу, чтобы проверить реакцию CDC, я отбросил таблицу.
  • Ранее в моем тестировании удаление таблицы также приводило к тому, что CDC отбрасывает таблицу CT и любые метаданные, относящиеся к удаленной таблице.
  • Похоже, что последний оператор отбрасывания никогда не был обнаружен CDC, поскольку таблица CT все еще существует, и для нее существует запись в таблице cdc.change_tables
  • Я не могу отключить CDC для таблицы или включить CDC для вновь созданной таблицы с тем же именем, поскольку запись cdc.change_table существует и связана с несуществующим идентификатором объекта в метаданных SQL Server.
  • Я попытался отключить CDC для базы данных, но команда выполнялась в течение 1 часа без ответа, прежде чем я ее остановил.
  • При попытке отключить CDC для базы данных список заданий для агента SQL Server перестал отвечать (время ожидания запроса блокировки) в Management Studio. После отмены команды отключения CDC Агент по-прежнему не отвечал.
  • Я попытался перезапустить службу агента. Он успешно остановился, но завис во время (казалось бы, финальной стадии) запуска. Теперь сервис находится в состоянии «Запуск».

Я перезагружаю сервер, чтобы попытаться снова запустить агент.

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

Кто-нибудь испытывал подобные проблемы с CDC, которые указывали бы на нестабильность в системе?

РЕДАКТИРОВАТЬ: После того, как агент снова запустился, я попытался вручную удалить запись change_tables и таблицу CT, но когда я попытался включить таблицу, произошел ряд ошибок, связанных с метаданными CDC. Однако мне удалось успешно отключить CDC для всей базы данных, а затем снова включить его. Это, конечно, отбросило все ресурсы, связанные с функцией CDC.

Ответы [ 2 ]

2 голосов
/ 10 декабря 2010

После повторного запуска Агента (перезагрузка сервера) я попытался вручную удалить запись change_tables и таблицу CT, но при попытке включить таблицу возник ряд ошибок, связанных с метаданными CDC.Однако мне удалось успешно отключить CDC для всей базы данных, а затем снова включить его.Это, конечно, отбросило все ресурсы, связанные с функцией CDC.

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

Я пришел к выводу, что да, вам действительно не следует вручную связыватьсяс любым из ресурсов CDC.

1 голос
/ 11 сентября 2012

Я обнаружил, что при попытке запустить EXEC sys.sp_cdc_disable_db происходит сбой в базе данных, не принадлежащей sa.

(я все еще вижу таблицы cdc по select db_name() as dbname , p.rows,* from sys.objects o join sys.partitions p on o.object_id=p.object_id where o.schema_id=schema_id('cdc') and p.index_id < 2)

Sys.sp_cdc_disable_db, сразу же завершается успешнопосле просто exec sp_changedbowner 'sa'

...