Ошибка задания SQL Server в уведомлении по электронной почте

Я настроил электронную почту базы данных, операторов и т. д. в своем экземпляре, управляемом SQL, чтобы получать электронное письмо в случае сбоя задания.

В электронном письме мы получаем что-то вроде этого «Не удалось выполнить yyy_job на шаге 3».

Но мой вопрос... Есть ли способ добавить сообщение об ошибке в тело письма?Я искал это, но не могу найти подходящий ответ.

заранее спасибо

2 ответа

Насколько я знаю, нет возможности добавить дополнительную информацию в уведомления по электронной почте, когда задание не выполняется.

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

https://www.sqlshack.com/reporting-and-alerting-on-job-failure-in-sql-server/

У нас аналогичная установка. У нас есть задание агента SQL Server, состоящее из нескольких шагов.

Я настроил его таким образом, что мы получаем электронное письмо с уведомлением, когда задание начинается, и другое электронное письмо, когда оно заканчивается. Есть две версии итогового электронного письма — одна для успеха, другая для неудачи.

В конце работы есть два последних шага, называемых «Email OK» и «Email FAIL». Обратите внимание, как для каждого шага настроены параметры «При успехе» и «При отказе».

Вот как шаги «Email OK» и «Email FAIL» выглядят в нашем случае:

В моем случае у меня просто разные темы писем, поэтому в почтовом клиенте их легко фильтровать.

Вы можете написать любой дополнительный код T-SQL для выполнения запроса к msdb.dbo.sysjobhistoryи включите соответствующий результат в электронное письмо.

Я не буду писать здесь полный запрос, но думаю, что он будет похож на мой набросок ниже. Если вам нужна помощь с этим, задайте другой вопрос.

Вот как вы можете использоватьmsdb.dbo.sp_send_dbmailчтобы включить результат некоторого запроса в текст электронной почты:

      EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'ABC'
    ,@recipients = 'abc@example.com'
    ,@subject = 'Some subject line'
    ,@body = @VarBody
    ,@body_format = 'TEXT'
    ,@importance = 'NORMAL'
    ,@sensitivity = 'NORMAL'
    ,@query = N'
        -- show latest entry in the log for your job
        SELECT TOP(1)
            message, ...
        FROM
            msdb.dbo.sysjobhistory
        WHERE
            job_id = ''your job ID''
        ORDER BY
            instance_id DESC; 
        '
    ,@execute_query_database = 'msdb'
    ;

Посмотрите в документации список параметров для sp_send_dbmail. Пример выше встраивает результат запроса. Вы также можете прикрепить его отдельным файлом.

Другие вопросы по тегам