Отправить электронное письмо, когда агент распределения или агент чтения журналов ОСТАНОВИТСЯ (умышленно или случайно)

Вопрос или проблема

Я хочу отправлять электронное письмо операторам, когда агент распределения или задания 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, вы можете воспользоваться следующим подходом.

Шаги для настройки отправки уведомлений по электронной почте

  1. Создание хранимой процедуры для отправки уведомлений:
    Для начала вы можете создать хранимую процедуру, которая будет отправлять уведомления. Это будет удобно, так как в дальнейшем потребуется вызвать эту процедуру в джобе.

    CREATE PROCEDURE SendEmailNotification
    @JobName NVARCHAR(255)
    AS
    BEGIN
       EXEC sp_send_dbmail
           @recipients = '[email protected]',
           @subject = 'Агент распределения остановлен',
           @body = 'Агент ' + @JobName + ' был остановлен. Пожалуйста, проверьте статус работы.';
    END
  2. Добавление нового шага в джобу агентов:
    Вам нужно добавить новый шаг в джобу агента распределения (например, как дополнительный шаг перед последним шагом, который останавливает выполнение).

    Структура нового шага:

    • Название шага: Проверка состояния работы
    • Тип шага: 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
  3. Настройка условий выполнения для шагов джобов:
    Теперь нужно проанализировать, как настроить условия для вашего нового шага и предыдущих.

    • Шаги до вашего нового шага (например, основной шаг агентов):

      • On Success: Перейти к вашему новому шагу.
      • On Failure: Если основной шаг завершается с ошибкой, то зря переходить к вашему новому шагу не стоит. Поэтому оставляем это значение по умолчанию — «Не переходить».
    • Новый шаг ("Проверка состояния работы"):

      • On Success: Перейти к конечному шагу, завершающему работу джоба (возможно, стоичное завершение).
      • On Failure: Также оставить по умолчанию — никаких действий.
  4. Дополнительная настройка для условий остановки:
    Если вы хотите также реагировать на случаи, когда работа агента останавливается неконтролируемым образом, например, за счет неожиданного завершения, можно использовать SQL Server Agent Alerts. Можно создать алерты для ошибок, связанных с остановкой работы, и связать их с операторами для отправки уведомлений.

Заключение

Ваше решение по добавлению шага для отправки уведомлений при остановке агентов абсолютно корректно с точки зрения архитектуры. С помощью вышеописанных шагов вы сможете настроить систему уведомлений так, чтобы оперативно реагировать на остановку работы агентов распределения в SQL Server, тем самым улучшая мониторинг и управление состоянием ваших систем.

Оцените материал
Добавить комментарий

Капча загружается...