查看SQL Server代理作业的历史信息
作者:网络转载 发布时间:[ 2013/2/4 14:02:20 ] 推荐标签:
不敢说众所周知,但是大部分人都应该知道SQLServer的代理作业情况都存储在SQLServer5大系统数据库(master/msdb/model/tempdb/resources)中的MSDB中,而由于代理作业的长期运行和种类较多,所以一般可以看到msdb的大小往往比其他库加起来还大。本文主要专注在如何查询作业的运行时间点及运行持续时间上。
作为DBA,周期性检查作业情况是一下非常重要的任务。本文不讲述太深入。只讲述如何查询作业的历史运行情况。并加入一下在联机丛书上没有提及,也是所谓的未公开的系统函数。
作业执行的历史信息存放在msdb.dbo.sysjobhistory中。但是在这个表里面,日期和时间列的显式方式会有点不常规,这引出了本文的意图。首先我们来看看表里的数据,这里需要关联一下sysjobs表:
SELECT j.name AS 'JobName' ,
run_date ,
run_time
FROM msdb.dbo.sysjobs j
INNER JOIN msdb.dbo.sysjobhistory h ON j.job_id = h.job_id
WHERE j.enabled = 1 --Only Enabled Jobs
ORDER BY JobName ,
run_date ,
run_time DESC
运行上面的代码,得到以下的结果:
可以看到run_date这列,虽然能看得懂,但是是YYYYMMDD这样的格式,用起来可能有点不方便。而run_time更加难用了。Run_time中的180002意味着:18:00:02执行。这些不直观的数据对时常需要使用的DBA来说是一种痛苦,当然,可以通过字符串函数来转换成自己喜欢看的格式。但是这里提供一个微软未公开的函数:
MSDB.dbo.agent_datetime(run_date,run_time)
它会返回一个比较常规的日期格式,使得使用和查看的时候都很方便,作为一个未公开的函数,对其的了解不多只需要会用可以了。可以使用下面的例子:
SELECT j.name AS 'JobName' ,
run_date ,
run_time ,
msdb.dbo.agent_datetime(run_date, run_time) AS 'RunDateTime'
FROM msdb.dbo.sysjobs j
INNER JOIN msdb.dbo.sysjobhistory h ON j.job_id = h.job_id
WHERE j.enabled = 1 --Only Enabled Jobs
ORDER BY JobName ,
RunDateTime DESC
结果转换后,得到下面的结果:
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11