![SQL 维护计划 - 失败时发送电子邮件](https://linux22.com/image/503298/SQL%20%E7%BB%B4%E6%8A%A4%E8%AE%A1%E5%88%92%20-%20%E5%A4%B1%E8%B4%A5%E6%97%B6%E5%8F%91%E9%80%81%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6.png)
我的 SQL 2008 机器有一个维护计划 - 我希望它在发生故障时(或如果发生故障)发送电子邮件地址。我已经设置了数据库邮件,可以发送测试电子邮件。
我怎样才能做到这一点?
答案1
- 配置 SQL Server 代理以使用数据库邮件
- 创建操作员邮件、寻呼机、工作时间等。
- 配置维护计划,根据退出条件向适当的操作员发送电子邮件。
答案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