是否有查询来检查在给定时间之间运行的作业。我可以检查两次之间安排的作业,但我不想要那样。
示例 我想知道在16:00:00和之间运行的作业是什么17:00:00
在某些情况下,安排在的作业15:00:00可能会运行超过 1 小时,我也想要这些。我在谷歌搜索过,我得到的只是安排在两次之间的工作
好吧,您可以运行以下查询来检索两次之间运行的作业,或者您可以更改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)
| 归档时间: |
|
| 查看次数: |
6140 次 |
| 最近记录: |