我正在尝试编写一个 SQL 查询,它告诉我 SQL 作业是否已根据其计划运行。例如,如果一项作业计划在下午 12:00 运行,而我们现在是下午 12:05,但它仍然没有运行,我想知道这一点。检测它的最佳方法是什么?
过去我们有 SQL 作业要定期运行,而 SQL Server 没有运行它们。为防止这种情况发生,我们希望对 SQL Server 2008 R2 运行查询并检查作业是否运行,如果未运行则触发警报。
谢谢您的帮助!
我正在尝试编写一个 SQL 查询,它告诉我 SQL 作业是否已根据其计划运行。例如,如果一项作业计划在下午 12:00 运行,而我们现在是下午 12:05,但它仍然没有运行,我想知道这一点。检测它的最佳方法是什么?
过去我们有 SQL 作业要定期运行,而 SQL Server 没有运行它们。为防止这种情况发生,我们希望对 SQL Server 2008 R2 运行查询并检查作业是否运行,如果未运行则触发警报。
谢谢您的帮助!
您可以尝试未记录的程序
sys.xp_sqlagent_enum_jobs
此过程返回作业上次运行的日期和时间。
此查询将告诉您作业运行的详细信息。
Select hist.run_date,hist.run_status,hist.run_time
from msdb..sysjobs jb
inner join msdb..sysjobhistory hist
on jb.job_id = hist.job_id
where jb.name = 'MyJob'
根据 Sql Books Online http://msdn.microsoft.com/en-us/library/ms174997.aspx
运行状态
作业执行状态:
0 = 失败
1 = 成功
2 = 重试
3 = 取消
更好地了解哪些工作没有历史。尝试运行此查询。
select name from msdb.dbo.sysjobs where job_id not in (select job_id from sdb.dbo.sysjobhistory) and enabled = 1
默认情况下,每个作业在执行时都应该有历史记录。