如何查找在两次之间运行的作业

Pரத*_*ீப் 8 sql-server jobs

是否有查询来检查在给定时间之间运行的作业。我可以检查两次之间安排的作业,但我不想要那样。

示例 我想知道在16:00:00和之间运行的作业是什么17:00:00

在某些情况下,安排在的作业15:00:00可能会运行超过 1 小时,我也想要这些。我在谷歌搜索过,我得到的只是安排在两次之间的工作

Joh*_* N. 5

好吧,您可以运行以下查询来检索两次之间运行的作业,或者您可以更改WHERE表达式以捕获运行了特定持续时间的作业。

SELECT sj.name,
       sjh.step_name,
       sjh.step_id,
       --sjh.run_status,
       STUFF(STUFF(CAST(sjh.run_date as nvarchar(10)),5,0,'.'),8,0,'.') as HistRunDate,
       STUFF(STUFF(RIGHT(REPLICATE('0', 6) +  CAST(sjh.run_time as varchar(6)), 6), 3, 0, ':'), 6, 0, ':') as HistRunTime,
       STUFF(STUFF(STUFF(RIGHT(REPLICATE('0', 8) + CAST(sjh.run_duration as varchar(8)), 8), 3, 0, ':'), 6, 0, ':'), 9, 0, ':') as HistRunDuration
       --,sjh.run_status AS JobStatus
FROM   msdb.dbo.sysjobs           AS sj
       join msdb.dbo.sysjobhistory AS sjh --- was sysjobschedule sjc
            on sjh.job_id = sj.job_id
WHERE  1=1
--AND sj.enabled = 1
------------------------------------------
-- for a certain time frame
------------------------------------------
AND ((sjh.run_date = 20170617 and sjh.run_time > 200000) 
or (sjh.run_date = 20170722 and sjh.run_time < 100000))

------------------------------------------
-- between certain dates and with a long duration
------------------------------------------
--AND (sjh.run_date > 20160501) AND (sjh.run_date < 20160503)
--and sjh.run_duration > 3000

------------------------------------------
-- Job Outcome not required
------------------------------------------
--and sjh.step_name != '(Job outcome)'
--and sjh.step_id = 0

------------------------------------------
-- Find failed jobs
------------------------------------------
--and sjh.run_status != 1


ORDER BY
       sjh.run_date,
       sjh.run_time
Run Code Online (Sandbox Code Playgroud)

正如McNets指出的,有多种方法可以检索您需要的日期。这是很好的了解,虽然该日期和时间被定义为INT在该sys.jobsxxxx表中,而不是作为日期和时间为人们所期望的。

参考:dbo.sysjobhistory (Transact-SQL) (Microsoft Technet)