Вопрос или проблема
Я хочу отправлять электронное письмо операторам, когда агент распределения или задания Log Reader SQL ОСТАНАВЛИВАЮТ работу
У меня есть транзакционная репликация на моем сервере 2008R2 к серверу распределения 2012 и к серверу подписчика 2012. Все три сервера находятся в режиме полного восстановления. Это подписка на рассылку.
Может кто-нибудь подсказать, как я могу добавить еще один шаг к заданию SQL агента распределителя, чтобы отправлять электронное письмо операторам, когда задание остановлено? Я могу использовать sp_send_dbmail
в шагах и использовать следующий скрипт, чтобы проверить, существует ли какая-либо активность задания, которая остановилась:
IF EXISTS(SELECT 1
FROM msdb.dbo.sysjobs J
JOIN msdb.dbo.sysjobactivity A ON A.job_id=J.job_id
WHERE J.name=N'PubServer-publicationName-SubscriberServer-24'
AND A.run_requested_date IS NOT NULL
AND A.stop_execution_date IS NOT NULL
)
Begin
EXEC sp_send_DbMail
@recipients="[email protected]",
@Subject="Агент распределения выдает ошибку",
@body = 'Текст письма'
End
Теперь – вопрос в том, какие изменения я должен внести в ‘При успехе’ и ‘При сбое’ предыдущего шага задания, и что должно быть ‘При успехе’ и ‘При сбое’ этих новых шагов задания:
И правильно ли я подхожу к отправке уведомления по электронной почте, когда агент распределения ОСТАНАВЛИВАЕТСЯ?
Я искал в интернете и смог найти лишь решения для случаев, когда задание агента SQL завершается с ошибкой – я знаю, как добавить такие уведомления, когда задание завершилось с ошибкой. Но я хочу отправлять электронную почту, когда задание останавливается.
Ответ или решение
Для решения задачи отправки уведомлений по электронной почте в случае остановки агентов распределения или Log Reader в SQL Server, вы можете воспользоваться следующим подходом.
Шаги для настройки отправки уведомлений по электронной почте
-
Создание хранимой процедуры для отправки уведомлений:
Для начала вы можете создать хранимую процедуру, которая будет отправлять уведомления. Это будет удобно, так как в дальнейшем потребуется вызвать эту процедуру в джобе.CREATE PROCEDURE SendEmailNotification @JobName NVARCHAR(255) AS BEGIN EXEC sp_send_dbmail @recipients = '[email protected]', @subject = 'Агент распределения остановлен', @body = 'Агент ' + @JobName + ' был остановлен. Пожалуйста, проверьте статус работы.'; END
-
Добавление нового шага в джобу агентов:
Вам нужно добавить новый шаг в джобу агента распределения (например, как дополнительный шаг перед последним шагом, который останавливает выполнение).Структура нового шага:
- Название шага: Проверка состояния работы
- Тип шага: T-SQL
- Код:
IF EXISTS(SELECT 1 FROM msdb.dbo.sysjobs J JOIN msdb.dbo.sysjobactivity A ON A.job_id = J.job_id WHERE J.name = N'PubServer-publicationName-SubscriberServer-24' AND A.run_requested_date IS NOT NULL AND A.stop_execution_date IS NOT NULL) BEGIN EXEC SendEmailNotification @JobName = 'PubServer-publicationName-SubscriberServer-24'; END
-
Настройка условий выполнения для шагов джобов:
Теперь нужно проанализировать, как настроить условия для вашего нового шага и предыдущих.-
Шаги до вашего нового шага (например, основной шаг агентов):
- On Success: Перейти к вашему новому шагу.
- On Failure: Если основной шаг завершается с ошибкой, то зря переходить к вашему новому шагу не стоит. Поэтому оставляем это значение по умолчанию — «Не переходить».
-
Новый шаг ("Проверка состояния работы"):
- On Success: Перейти к конечному шагу, завершающему работу джоба (возможно, стоичное завершение).
- On Failure: Также оставить по умолчанию — никаких действий.
-
-
Дополнительная настройка для условий остановки:
Если вы хотите также реагировать на случаи, когда работа агента останавливается неконтролируемым образом, например, за счет неожиданного завершения, можно использовать SQL Server Agent Alerts. Можно создать алерты для ошибок, связанных с остановкой работы, и связать их с операторами для отправки уведомлений.
Заключение
Ваше решение по добавлению шага для отправки уведомлений при остановке агентов абсолютно корректно с точки зрения архитектуры. С помощью вышеописанных шагов вы сможете настроить систему уведомлений так, чтобы оперативно реагировать на остановку работы агентов распределения в SQL Server, тем самым улучшая мониторинг и управление состоянием ваших систем.