SQL Server - 用于检测由于溢出而丢失的代理作业的TSQL

时间:2016-02-25 19:27:05

标签: sql-server tsql sql-server-agent

我正在尝试使用TSQL检测JOB是否已超出并错过了下一个计划。

场景:作业计划每小时运行一次(可能启用了多个计划),但由于某些原因(例如网络延迟),作业停止需要10分钟,现在正在运行90分钟,因此错过了#39;每小时开始。

有一个名为msdb.dbo.sysjobactivity的表,它有一个名为next_scheduled_run_date的列,但此日期仅在当前运行的作业完成后才会更新。这与“作业活动”监视器的行为相同,下一个运行日期仅在当前作业完成后更新。

msdb.dbo.sysjobactivity根据以下内容进行更新:https://dba.stackexchange.com/questions/22644/how-and-when-does-sql-agent-update-next-run-date-next-run-time-values

问题:如何根据作业运行时的当前作业开始时间计算作业的下一个计划运行。可能会分配多个计划。

任何指示赞赏。

1 个答案:

答案 0 :(得分:1)

这是一个棘手的问题。首先,您包含的stackexchange链接非常好。我跟着它,并做了我自己的追踪。下面的代码将为您指明正确的方向。您可能需要进行详细的测试,我发现当答案是在同一分钟时我有一些时间问题但是秒数稍微有点。您当然可以根据需要进行修改。

这是代码的第一稿,它应该让你朝着正确的方向前进

$evalAsync