2014-12-03 51 views
0

我正在运行SQL Server 2008,并且我有3个代理作业设置为一个接一个地运行,因为第二个成功取决于第一个,等等。如何监视被触发后运行的SQL Server代理作业

我拥有的每一份其他工作都是独立的,我使用包含MSDB..sysjobhistory run_status字段的脚本进行监控。

我想知道是否有一种方法可以专门查找某一天从未开始的所有工作。我知道我可以用另一种方式来思考问题,并说如果工作1失败,工作2就不可能运行;然而,我正在寻找更通用的解决方案,以防万一我需要创建其他链接类似的工作,我不必在我的夜间报告中硬编码更多的逻辑。

欢迎任何建议!

+2

将它们设置为单个作业中的步骤过于繁琐吗?如果“job1”失败,那么“job2”甚至不会尝试运行,并且您将知道是否因失败状态而失败。 – 2014-12-03 18:59:59

+0

@ Dave.Gugg在这种情况下,我希望它很简单。我的第一份工作有一些Java代码也需要执行,而我的第二份工作只有在SQL和Java都完成之后才能开始。 – wmarquez 2014-12-03 19:52:11

回答

0

MSDB..sysjobservers表为您的服务器中的每个代理作业保存一条记录,并且包含字段last_run_date,可以很容易地判断哪些作业在过去24小时内未运行。我的查询看起来像这样

SELECT A.name    AS [Name] 
     ,@@servername   AS [Server] 
     ,'Yes'    AS [Critical] 
FROM MSDB.dbo.sysjobs A 
INNER JOIN MSDB.dbo.sysjobservers B ON A.job_id = B.job_id 
WHERE A.name LIKE '2%SPRING%' 
     AND DATEDIFF(DAY, CONVERT(DATETIME, CONVERT(CHAR(8),B.last_run_date)), GETDATE()) > 1) 
相关问题