SQL 维护计划 - 失败时发送电子邮件

SQL 维护计划 - 失败时发送电子邮件

我的 SQL 2008 机器有一个维护计划 - 我希望它在发生故障时(或如果发生故障)发送电子邮件地址。我已经设置了数据库邮件,可以发送测试电子邮件。

我怎样才能做到这一点?

答案1

  1. 配置 SQL Server 代理以使用数据库邮件
  2. 创建操作员邮件、寻呼机、工作时间等。
  3. 配置维护计划,根据退出条件向适当的操作员发送电子邮件。

http://msdn.microsoft.com/en-us/library/ms186358.aspx

http://technet.microsoft.com/en-us/library/ms175962.aspx

答案2

向您的维护计划添加一个执行 SQL 任务,该任务调用 sp_send_dbmail,并将任何其他任务的故障路由连接到此任务。

答案3

我们添加了“执行 T-SQL 语句任务”,它调用一个存储过程,并以维护计划的名称作为参数:

EXEC server.schema.SP_SENDALERT 'plan.subplan';

在该存储过程中,我们查询 SYSJOBS 和 SYSJOBHISTORY 以获得计划以获取最后一次“失败”的消息,然后我们将其作为 send_dbmail 的一部分发送给“IT 支持”(由循环遍历 MESSAGING 表中未发送消息的过程驱动),类似于以下内容:

CREATE PROCEDURE SP_SENDALERT (@plan VARCHAR(MAX))
AS
BEGIN

    DECLARE @error VARCHAR(MAX)

    SELECT TOP 1 @error = SJH.[MESSAGE]FROM MSDB.DBO.SYSJOBS SJ
    LEFT JOIN MSDB.DBO.SYSJOBHISTORY SJH ON SJ.JOB_ID = SJH.JOB_ID
    WHERE SJ.ENABLED = 1
    AND SJH.RUN_STATUS = 0
    AND SJ.[NAME] = @plan
    ORDER BY SJH.RUN_DATE, RUN_TIME DESC

    INSERT INTO database.schema.MESSAGING
    (MESSAGE_TYPE, MESSAGE_SUBJECT, MESSAGE_BODY, RECIPIENTS, RECORD_ADDED)
    VALUES  (1, 'ERROR: ' + @plan, @error, '[email protected]', GETDATE())

END

相关内容