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

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

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

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

Помимо этих оповещений монитор репликации предоставляет набор предупреждений и оповещений, связанных с состоянием и производительностью. Дополнительные сведения см. в Настройке пороговых значений и предупреждений в инфраструктуре оповещений монитора репликации. Дополнительные сведения см. в разделе "Создание события User-Defined".

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

Просмотр журнала приложений напрямую

Чтобы просмотреть журнал приложений 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 (а также сведения о типе агента, времени оповещения, базе данных публикации, базе данных подписчика и типе публикации) задание ответа может напрямую запрашивать соответствующие сведения из таблицы. Хотя точную строку нельзя связать с определенным экземпляром оповещения, в таблице есть столбец состояния , который можно использовать для отслеживания обслуживаемых записей. Записи в этой таблице сохраняются в течение периода хранения истории.

Например, если бы вы должны были создать задание на ответ в 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  

См. также

Администрирование агента репликации
Рекомендации по администрированию репликации
Мониторинг (репликация)