Использование предупреждений для событий агента репликации
Область применения: 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. Дополнительные сведения см. в статье Создание пользовательского события.
Настройка стандартных предупреждений репликации
- SQL Server Management Studio: настройка предопределенных оповещений репликации (SQL Server Management Studio)
Просмотр журнала приложений напрямую
Чтобы просмотреть журнал приложений 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