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


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

Область применения: SQL Server

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

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

Идентификатор сообщения Стандартное предупреждение Условие, вызывающее предупреждение Введите дополнительные сведения в 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. Вы также можете определить оповещения для других событий репликации с помощью инфраструктуры оповещений 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 системной таблице. Предоставленные сведения уже анализируются в форме, легко используемой настраиваемыми программами.

Например, если данные в таблице на подписчике A завершается ошибкой Sales.SalesOrderHeader проверки, 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