Ошибка задания 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
. Пример выше встраивает результат запроса. Вы также можете прикрепить его отдельным файлом.