Использование предупреждений для событий агента репликации

Применимо к:SQL Server Управляемый экземпляр SQL Azure

SQL Server Management Studio и Microsoft агент SQL Server предоставляют способ мониторинга событий, таких как события агента реплика tion, с помощью оповещений. агент SQL Server отслеживает журнал приложений Windows для событий, связанных с оповещениями. Если такое событие происходит, агент SQL Server автоматически реагирует, выполняя определенную задачу и (или) отправляя сообщение электронной почты или сообщение пейджера указанному оператору. SQL Server включает набор предопределенных оповещений для агентов реплика tion, которые можно настроить для выполнения задачи и (или) уведомить оператора. Дополнительные сведения об определении выполняемых задач см. в подразделе «Автоматизация отклика на предупреждение» этого раздела.

При настройке компьютера в качестве распространителя производится установка следующих предупреждений.

Идентификатор сообщения Стандартное предупреждение Условие, вызывающее предупреждение Наличие дополнительных сведений в msdb..sysreplicationalerts
14150 Репликация: успех агента Успешное завершение работы агента. Да
14151 Репликация: неудача агента Работа агента завершена с ошибкой. Да
14152 Репликация: повторная попытка агента Агент завершает работу после неудачной повторной попытки выполнения операции (агент обнаружил ошибку: например, сервер недоступен, взаимоблокировка, сбой подключения, ошибка времени ожидания). Да
14157 Репликация: истекшая подписка удалена Подписка с истекшим сроком удалена. No
20572 Репликация: подписка повторно инициализирована после ошибки проверки достоверности Повторная инициализация подписки с помощью ответного задания «Повторная инициализация подписки при ошибке проверки данных» выполнена успешно. No
20574 Репликация: ошибка проверки данных подписчиком Ошибка проверки данных агентом распространителя или агентом слияния. Да
20575 Репликация: прошла проверку данных подписчиком Проверка данных агентом распространителя или агентом слияния проведена успешно. Да
20578 Репликация: нестандартное завершение работы агента Когда проверка данных вызывается через sp_publication_validation и @shutdown_agent имеет 1значение , агент распространителя завершает работу после завершения проверки. Да
22815 Предупреждение об обнаружении конфликта в одноранговой топологии Агент распространителя обнаружил конфликт при попытке применения изменений на одноранговом узле. Да

Наряду с этими предупреждениями монитор репликации предоставляет набор предупреждений и оповещений, относящихся к состоянию и производительности. Дополнительные сведения см. в статье Set Thresholds and Warnings in Replication Monitor. Вы также можете определить оповещения для других событий реплика tion с помощью инфраструктуры оповещений SQL Server. Дополнительные сведения см. в статье Создание пользовательского события.

Настройка стандартных предупреждений репликации

Непосредственный просмотр журнала приложений

Чтобы просмотреть журнал приложений Windows, используйте Просмотр событий Microsoft Windows. Журнал приложений содержит сообщения об ошибках SQL Server, а также сообщения для многих других действий на компьютере. В отличие от журнала ошибок SQL Server, новый журнал приложений не создается каждый раз при запуске SQL Server (каждый сеанс SQL Server записывает новые события в существующий журнал приложений); однако можно указать, сколько времени будут храниться регистрированные события. При просмотре журнала приложений Windows можно отфильтровать журнал для поиска определенных событий. Дополнительные сведения см. в документации по Windows.

Автоматизация отклика на предупреждения

Репликация обеспечивает выполнение ответного задания для подписок, которые не прошли проверку данных, а также предоставляет платформу для создания дополнительных автоматизированных ответов на предупреждения. Задание ответа называется "Повторно инициализировать подписки на сбой проверки данных" и хранится в папке заданий агент SQL Server в SQL Server Management Studio. Сведения о включении этого задания ответа см. в разделе "Настройка предопределенных оповещений репликации" (SQL Server Management Studio). Если статьи в публикации транзакций не проходят проверку, ответное задание проводит повторную инициализацию только тех статей, которые не прошли проверку. Если статьи в публикации слиянием не проходят проверку, ответное задание повторно инициализирует все статьи публикации.

Платформа для автоматизации ответов

Обычно при возникновении предупреждения информация, позволяющая понять причину появления предупреждения и предпринять необходимые действия, содержится исключительно в самом предупреждающем сообщении. Анализ этой информации подвержен ошибкам и занимает немало времени. Репликация облегчает автоматическое реагирование, предоставляя дополнительную информацию о предупреждении в системной таблице sysreplicationalerts ; эта информация уже представлена в форме, которая может быть легко использована пользовательскими программами.

Например, если данные в таблице Sales.SalesOrderHeader на подписчике A завершается ошибкой проверки, SQL Server может активировать сообщение 20574, уведомляя вас об этом сбое. Выводится следующее сообщение: «Ошибка проверки данных подписки подписчика A на статью SalesOrderHeader в публикации MyPublication».

Если ответ создается на основе этого сообщения, необходимо вручную выделить из сообщения имя подписчика, имя статьи, имя публикации и ошибку. Однако поскольку агент распространителя и агент слияния записывают ту же информацию в таблицу sysreplicationalerts (вместе с подробными сведениями, такими как тип агента, время вывода предупреждения, база данных публикации, база данных подписчика и тип публикации), ответное задание может запросить соответствующую информацию непосредственно из таблицы. Хотя конкретную строку нельзя связать с определенным экземпляром предупреждения, в таблице имеется столбец status , который можно использовать для отслеживания тех записей, которые были обработаны. Записи этой таблицы сохраняются в течение срока хранения журнала.

Например, если вы создали задание ответа в Transact-SQL, которое обслуживает сообщение 20574, можно использовать следующую логику:

declare @publisher sysname, @publisher_db sysname, @publication sysname, @publication_type int, @article sysname, @subscriber sysname, @subscriber_db sysname, @alert_id int  
declare hc cursor local for select publisher, publisher_db, publication, publication_type, article, subscriber,   
  subscriber_db, alert_id from   
  msdb..sysreplicationalerts where  
  alert_error_code = 20574 and status = 0  
  for read only  
open hc  
fetch hc into  @publisher, @publisher_db, @publication, @publication_type, @article, @subscriber, @subscriber_db, @alert_id  
while (@@fetch_status <> -1)  
begin  
/* Do custom work  */  
/* Update status to 1, which means the alert has been serviced. This prevents subsequent runs of this job from doing this again */  
update msdb..sysreplicationalerts set status = 1 where alert_id = @alert_id  
 fetch hc into  @publisher, @publisher_db, @publication, @publication_type, @article, @subscriber, @subscriber_db, @alert_id  
end  
close hc  
deallocate hc  

См. также

Администрирование агента репликации
Best Practices for Replication Administration
Мониторинг (репликация)