Используйте параметр -SkipErrors в агент распространения
В этой статье описывается использование -SkipErrors
параметра в агент распространения.
Оригинальная версия продукта: SQL Server
Исходный номер базы знаний: 327817
Сводка
Microsoft SQL Server включает новый параметр -SkipErrors
в агент распространения, который позволяет агент распространения пропускать указанную ошибку в репликации транзакций и продолжать процесс распространения.
Следующий фрагмент из раздела Обработка ошибок агента в SQL Server электронной документации:
При обычной обработке репликации не должно возникать ошибок, которые необходимо пропустить. Возможность пропуска ошибок во время репликации транзакций доступна для уникальных обстоятельств, в которых вы ожидаете ошибок и не хотите, чтобы они влияли на репликацию (например, при отработке отказа на дополнительного издателя во время доставки журналов).
Корпорация Майкрософт рекомендует использовать этот параметр осторожно и только в том случае, если вы хорошо понимаете следующее:
- Что указывает на ошибку.
- Почему возникает ошибка.
- Почему лучше пропустить ошибку, а не решать ее.
Если вы не знаете ответы на эти элементы, неправильное -SkipErrors
использование параметра может привести к несоответствию данных между издателем и подписчиком. В этой статье описаны некоторые проблемы, которые могут возникнуть при неправильном -SkipErrors
использовании параметра.
Дополнительная информация
При репликации транзакций изменения данных на издателе распространяются на подписчика в единице транзакции.
В одной транзакции может быть несколько команд. По умолчанию при сбое одной команды вся транзакция репликации выполняет откат на подписчике. Если добавить -SkipErrors
параметр , чтобы разрешить агент распространения пропускать определенные ошибки, отдельная команда, которая вызывает эту ошибку, не применяется к подписчику, но все остальные команды в тех же транзакциях будут применены. В этом случае транзакция репликации применяется к подписчику только частично, что может привести к несоответствию данных между издателем и подписчиком.
Например:
У вас есть транзакция, ожидая репликации в таблицу подписчика с именем T1. Эта транзакция включает 100 инструкций insert. Когда он применяется к подписчику, первые 90 вставляется правильно; однако девяносто первая инструкция insert завершается сбоем, и возникает ошибка нарушения первичного ключа 2627.
Если параметр не используется -SkipErrors
(поведение по умолчанию):
По умолчанию вся транзакция выполняет откат, и ни одна из 100 новых записей не вставляется в таблицу подписок. В этом случае необходимо исправить ошибку репликации, чтобы транзакцию можно было повторно применить к подписчику.
При использовании -SkipErrors
параметра:
Агент распространения регистрирует ошибку в журнале агент распространения, пропускает эту ошибку, а затем продолжает процесс распространения. Таким образом, за исключением девяносто первой новой записи, вызвавшей ошибку, другие 99 новых записей вставляются в таблицу подписки. Эта транзакция не применяется повторно агент распространения даже после того, как вы вручную исправите ошибку на подписчике. Таким образом, в этой ситуации у подписчика отсутствует девяносто первая новая запись и возникает проблема с несоответствием данных.
Кроме того, необходимо учитывать, что в SQL Server 2000 г. обычно агент распространения совместно используется несколькими публикациями (по умолчанию на каждую пару базы данных публикации и базы данных подписки используется один агент распространения), поэтому при добавлении -SkipErrors
параметра в агент распространения задание, оно влияет на все публикации, обслуживаемые этим агентом. В версиях SQL 2005 и SQL 2008 репликация транзакций по умолчанию использует независимые агенты для публикаций, созданных в мастере создания публикаций. Для публикаций, созданных с помощью sp_addpublication
хранимой процедуры, по умолчанию используется общий агент.
Чтобы использовать -SkipErrors
параметр для конкретной публикации, используйте независимый агент, который обслуживает только одну подписку. Чтобы использовать независимый агент, выполните действия для своей версии.
SQL Server 2000
В диспетчере SQL Server Enterprise щелкните правой кнопкой мыши публикацию, выберите и
Properties
на вкладке Параметры подписки выберите параметр Использовать агент распространения, независимо от другой публикации из этой базы данных.Примечание.
Этот параметр нельзя включить после добавления подписок в эту публикацию.
-SkipErrors
Добавьте параметр в агент распространения определенной подписки.
SQL Server 2005 и SQL Server 2008
В студии управления SQL Server перейдите в раздел Репликация, а затем в разделе Локальные публикации щелкните правой кнопкой мыши публикацию, выберите пункт Свойства, а затем на странице Параметры подписки измените значение Параметра независимой агент распространения с False на True.
Примечание.
Этот параметр нельзя включить после добавления подписок в эту публикацию.
-SkipErrors
Добавьте параметр в агент распространения определенной подписки.
Дополнительные сведения см. в указанных ниже статьях.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по