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

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

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

Симптомы

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

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

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

Msg 18805, Level 16, State 1, Procedure sp_replcmds, LineLineNumber[Batch Start Line LineNumber ]
Процессу Log-Scan не удалось создать реплицированную команду из номера последовательности журнала (LSN) {nnnnnnnn: nnnnnn: nnnnnn: nnnn}. Создайте резервную копию базы данных публикации и обратитесь в службу поддержки клиентов.
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 в таблицы с типами данных geometry, geography или hierarchyid отсутствуют. Чтобы избежать этой проблемы, выполните следующие действия.

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

    Примечание.

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