SQL Server 2008 CDC не отвечает и зависает после удаления таблицы

Я тестировал функцию сбора измененных данных 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 перестал отвечать (время ожидания запроса на блокировку) в студии управления. После отмены команды отключения CDC агент по-прежнему не отвечал.
  • Я попытался перезапустить службу агента. Он успешно остановился, но завис во время запуска (что, казалось, было последним этапом). Теперь служба застряла в статусе «Запуск».

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

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

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

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


person ulty4life    schedule 01.11.2010    source источник


Ответы (2)


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

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

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

person ulty4life    schedule 10.12.2010
comment
+1 вам действительно не следует вручную связываться с какими-либо ресурсами CDC. По моему опыту, если я дохожу до стадии, когда требуется возиться с таблицами системы CDC, значит, я сделал что-то не так. В моем случае моей ошибкой было удаление пользователя CDC (добавляемого автоматически при включении системы отслеживания измененных данных в базе данных) из роли db_owner. Затем это остановило работу по очистке и помешало мне отключить CDC в БД. - person Dan Nolan; 09.11.2011

Я обнаружил, что попытка запуска 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'

person Jack Ellison    schedule 11.09.2012
comment
Должен ли он конкретно принадлежать sa или просто иметь правильные разрешения на него? - person ulty4life; 12.09.2012
comment
За последние несколько месяцев я стал намного лучше знаком с внутренней работой репликации CDC, заданиями сканирования и хранимыми процедурами, связанными с процессом(ами) сканирования журналов и их мониторингом. Есть несколько дополнительных приемов для остановки заданий через cdc SP, которые освобождают статус блокировки репликации. - person ulty4life; 12.09.2012
comment
Мои два цента: в моем случае sa пользователь был отключен, а новый владелец (например, пользователь домена, как в моем случае) фиксированной базы данных был указан через пользовательский интерфейс в SSMS, у меня есть такая ошибка could not update the metadata that indicates database 'MyDatabase' is enabled for change data capture, когда я пытался включить CDC. Мое решение заключается в изменении владельца базы данных CDC через обычный T-SQL: exec sp_changedbowner 'domain\user' затем я запускаю exec sys.sp_cdc_enable_db и все работает нормально - person Konstantin; 30.04.2013