【发布时间】:2017-02-26 18:35:03
【问题描述】:
我有 3 个执行 SSIS 包的 SQL 代理作业。当作业出错时,它会生成一封主题为“作业失败 -”的电子邮件,并且电子邮件中包含“作业失败”的消息。该作业由调度方案调用,运行的最后一步是 Run_'
当我查看作业历史记录时,它没有可见的完整错误消息。有什么方法可以将作业配置为在电子邮件中包含 COMPLETE 错误消息?或者,有没有一种方法可以构建一个存储过程,该过程将在特定作业失败时执行,并查询其中一个系统表(sysjobs)?
我以前从未这样做过,但我想我可以在 sysjobs 表中构建一个触发器,该触发器在特定作业失败时触发,并执行 sp_db_sendmail。我试图避免走这条路。有完成我的任务的最佳方式吗?
【问题讨论】:
-
这是从 ssisdb 目录中提取消息的示例查询。这些提供的信息比任何作业日志中都多得多。您(或我)可以扩展它以仅返回给定包名称的最新错误。 sqlblog.com/blogs/jamie_thomson/archive/2012/10/17/…
-
@Nice.McDermaid - 我有类似的东西,但我需要在作业失败时立即生成的东西 - 不是在设定时间运行并获取所有信息的预定作业失败的工作。换句话说,一旦作业失败并发送通知电子邮件,我就需要该电子邮件中的所有错误消息信息,或者,我可以构建另一封电子邮件来捕获整个消息。
-
好吧,您已经有一些发送电子邮件的东西 - 只需将其添加到其中。如果您描述了您发送电子邮件的过程,我们可以看看我们是否可以解决问题。它只是一个失败的 SQL 代理作业步骤,还是在 SSIS 包中?
-
@Nick.McDermaid - 当前电子邮件在作业失败时设置在“通知”中。这是在 Job 中设置的,在 ssis 包中没有设置任何内容。该作业只是执行 ssis 包。
-
关于只在失败后发送(而不是轮询),请遵循@Pinwar13 的建议。但是您需要查询 SSIS 目录,而不是 SQL 代理表。正如您所推测的那样,代理表没有用处有很多原因。只需查询 SSIS 目录表即可。唯一的技巧是您只需要搜索正确的包标识符即可获取包的正确日志
标签: sql sql-server-2012 sql-agent-job