当作业失败时,如何让 SQL Server 将错误详细信息通过电子邮件发送给我?

Nic*_*mas 15 monitoring sql-server

SQL Server 允许您将作业配置为在失败时发送电子邮件警报。这是监控您的工作的一种简单而有效的方法。但是,这些警报不包括任何细节——只是成功或失败的通知。

如果作业失败,典型的警报电子邮件将如下所示:

JOB RUN:        'DBA - Consistency Check Databases' was run on 8/14/2011 at 12:00:04 AM
DURATION:       0 hours, 0 minutes, 0 seconds
STATUS:         Failed
MESSAGES:       The job failed.  The Job was invoked by Schedule 2 (Nightly Before 
                Backup 12AM).  The last step to run was step 1 (Check Databases).
Run Code Online (Sandbox Code Playgroud)

要确定失败的原因,您必须导航到 SQL Server Management Studio 中的实例,找到作业并查看其执行历史记录。在大型环境中,必须不断地这样做可能会很痛苦。

理想的警报电子邮件应预先包含失败原因,并让您直接着手解决方案。

我熟悉这个问题的解决方案。有没有人有任何经验?它的缺点是:

  1. 你必须为每一份工作添加一个新步骤,并且
  2. 你必须祈祷没有人弄乱警报过程, spDBA_job_notification

有没有人想出更好的解决方案?

小智 10

你可能会做的事情只是一个想法,把想法扔出去......

创建一个作业,定期检查 msdb 中的作业表,以查看是否有任何作业显示为失败,这可以通过良好的T-SQL 查询来完成。然后您可以进入 sysjobsteps 表并查看是否为作业设置了输出日志。让一个存储过程发送一封电子邮件,将该文件附加到它。您将能够准确地看到作业从开始到失败做了什么,而无需接触服务器。

然后也可以让 PowerShell 脚本检查事件日志中的错误。它允许您过滤相当多的内容以准确获取您正在寻找的消息类型。您可以将其设置为定期运行的 SQL 代理作业。然后在 PowerShell 脚本中使用电子邮件 cmdlet 发送消息(如果找到)。

这里的想法很牵强,只是我想到的一些。