Поделиться через


Задание записи CDC завершается сбоем при обработке изменений для таблицы с типом данных system CLR (geometry, geography или hierarchyid)

Эта статья помогает обойти проблему, когда задание записи CDC завершается сбоем при обработке изменений для таблицы с типом данных system CLR (geometry, geography или hierarchyid).

Применяется к: SQL Server
Исходный номер базы знаний: 4538384

Симптомы

Рассмотрим следующий сценарий:

  • Функция отслеживания измененных данных (CDC) включена в таблицу с типом данных CLR системы, например geometry, geography или hierarchyid.
  • Задание записи CDC (сканирование) обрабатывает изменения, связанные с другими таблицами. Процесс еще не достиг таблицы с системным типом данных CLR.
  • Вы вносите некоторые изменения языка обработки данных (DML) в таблицу с системным типом данных CLR. Затем вы вносите изменения языка определения данных (DDL) в той же таблице (например, вы добавляете столбец).

В этом сценарии, когда задание записи CDC начинает обработку таблицы с типом данных system CLR, она завершается ошибкой и возвращает следующее сообщение об ошибке:

Msg 18805, level 16, State 1, Procedure sp_replcmds, LineLineNumber[Batch Start LineNumber ]
Не удалось создать реплицированную команду из номера последовательности журнала (LSN) {nn: nn: nnnnnnnn: nnnnnn}. Выполните резервное копирование базы данных публикации и свяжитесь со службой поддержки пользователей.
Msg 22859, Level 16, State 2, Procedure sp_replcmds, LineNumber [Batch Start LineNumber ]
Процессу просмотра журнала не удалось обработать записи журнала. Чтобы определить причину и устранить связанные с ней проблемы, см. ошибки, выданные ранее в текущем сеансе.
Msg 3621, Level 16, State 6, Procedure sp_replcmds, LineNumber [Batch Start LineNumber ]
Выполнение данной инструкции было прервано.
Msg 22864, Level 16, State 1, Procedure sp_MScdc_capture_job, LineNumber[Batch Start LineNumber ]
Сбой вызова sp_MScdc_capture_job заданием записи для базы данных DatabaseName. Чтобы определить причину сбоя, просмотрите предыдущие ошибки.

Кроме того, в журнал ошибок может входить следующая запись:

Ошибка: 913, серьезность: 16, состояние: 16. Не удалось найти идентификатор базы данных. База данных может быть еще не активирована либо может находиться в процессе перехода. Повторите запрос после того, как база данных станет доступной. Если вы не считаете, что эта ошибка связана с базой данных, которая перемещает его состояние, и эта ошибка продолжает возникать.

Дополнительная информация

Эта проблема не возникает, если задание записи CDC изначально обрабатывает только DML, а затем обрабатывает изменение DDL при следующем запуске.

Обходное решение

Чтобы обойти эту проблему, попробуйте один из следующих методов:

  • Избегайте использования проблемных типов данных (geometry, geography, hierarchyid) вместе с CDC.

  • Убедитесь, что при внесении изменений DDL в таблицах с геометрическими, географическими или иерархическими типами данных нет изменений DML. Чтобы избежать этой проблемы, выполните следующие действия.

    1. Quiesce all DML to the table.
    2. Выполните задание записи для обработки изменений.
    3. Запустите DDL для таблицы.
    4. Запустите задание записи для обработки изменений DDL.
    5. Повторно включите обработку DML.

    Примечание.

    Если вы продолжаете сталкиваться с этой проблемой, отключите и повторно включите CDC в таблице.