查看Job执行的历史记录
Agent Job 是SQL Server提供的自动管理工具,用户可以创建一个Job,设置Schedule,这样SQL Server Agent就会在指定的时间自动执行任务。一个任务可以是一段TSQL脚本,也可以是一个SSIS Package。SQL Server把Job每一次执行的历史信息存放在系统数据库msdb中。
Agent Job由Job Step,Schedule 和 Notification构成,本文简单介绍Job和Step的基本信息。
一,Agent Job的基本信息
Agent Job实际上是Job Step的容器,每一个Step都是一个待执行的任务,为了便于区分,Job的每一个Step都有一个编号,从1开始,依次递增。特殊地,step_id=0 代表Job的整体执行情况,Step名称为 (Job outcome)。
1,Job的基本信息
通过 msdb.dbo.sysjobs来查看Job的基本信息,第一个Step的ID是1,第一个开始运行的Step叫做Start Step,通常情况下,Start Step是从1 开始的。
select j.job_id
,j.name as job_name
,j.enabled
,j.description
,j.start_step_id
,j.date_created
,j.date_modified
from msdb.dbo.sysjobs j with(nolock)
where name =N'xxx'
2,Job Step的基本信息
通过msdb.dbo.sysjobsteps 来查看Step的基本信息,常用的字段:
- subsystem:子系统的名称,常见的是TSQL 和 SSIS
- command:子系统执行的命令
- last_run_outcome:step上一次执行的结果,0 = Failed,1 = Succeeded,2 = Retry,3 = Canceled,5 = Unknown
- last_run_duration :step上一次执行使用的时间,结果的格式是hhmmss
- last_run_retries:step上一次重试的次数
- last_run_date 和 last_run_time:step上一次开始执行的日期和时间,结果的格式分别是:yyyyMMdd 和 hhmmss
通过msdb.dbo.sysjobsteps 可以查看到上一次执行的状态:
select js.job_id
,js.step_id
,js.step_name
,js.subsystem
,js.command
,js.last_run_outcome
,case js.last_run_outcome
when 0 then 'Failed'
when 1 then 'Succeeded'
when 2 then 'Retry'
when 3 then 'Canceled'
else 'Unknown'
end as last_run_outcome_descr
,js.last_run_duration
,js.last_run_date
,js.last_run_time
,js.last_run_retries
from msdb.dbo.sysjobsteps js with(nolock)
where js.job_id=N'375ED3A3-97D5-4B10-924F-4E82C8F49B45'
and js.step_id=1
3,Job执行的历史消息
通过msdb.dbo.sysjobhistory来查看job step的历史消息,常用的字段:
- instance_id:每一条记录都是一个实例
- job_id和 step_id:job的id和step的id,注意 step_id=0表示整个Job
- run_status:job step运行的状态,0 = Failed, 1 = Succeeded, 2 = Retry, 3 = Canceled, 4 = In Progress(很少存在run_status=4的情况)
- run_date 和 run_time:job step运行的日期和时间,格式分别是:yyyyMMdd 和 hhmmss
- run_duration:job step运行的总时间,格式是hhmmss
注意:在大多数情况下,正在执行的job step不会创建history instance,即msdb.dbo.sysjobhistory中很少存在run_status=4的情况。绝大多数情况下,只有job step运行完成之后,才会创建一个history instance。
查看Job Step运行的所有历史记录,每一个step都是一个实例(Instance),表示一条历史记录。
select jh.instance_id
,jh.job_id
,jh.step_id
,jh.step_name
,jh.message
,case jh.run_status
when 0 then 'failed'
when 1 then 'Succeeded'
when 2 then 'Retry'
when 3 then 'Canceled'
when 4 then 'In Progress'
end as run_status
,jh.run_date
,jh.run_time
,jh.run_duration
from msdb.dbo.sysjobhistory jh with(nolock)
where job_id=N'375ED3A3-97D5-4B10-924F-4E82C8F49B45'
order by instance_id desc
二,Job History的查询
查看Job执行的历史记录
select jh.instance_id
,jh.job_id
,cast(stuff(stuff(str(jh.run_date,8),7,0,'-'),5,0,'-') + ' ' +
stuff(stuff(replace(str(jh.run_time,6,0),' ',''),5,0,':'),3,0,':')
as datetime) as job_start_datetime
,stuff(stuff(replace(str(jh.run_duration,6),' ',''),5,0,':'),3,0,':') as job_run_duration
,jh.step_id
,jh.step_name
,case jh.run_status
when 0 then 'failed'
when 1 then 'Succeeded'
when 2 then 'Retry'
when 3 then 'Canceled'
end as run_status
,jh.message
from msdb.dbo.sysjobhistory jh with(nolock)
where jh.job_id=N'375ED3A3-97D5-4B10-924F-4E82C8F49B45'
and jh.step_id=0 -- stand for job
order by jh.instance_id desc
三,记录Agent Job 的活动和状态
在启动SQL Server Agent时,Agent会新建一个Session,并把Session的ID存储到msdb.dbo.syssessions 中,该表记录的信息是Agent 创建的Session ID和Agent启动的时间。注意,只有在Agent关闭后,Agent重新启动时,才会新建Session。在Agent正常运行时,Agent运行Job是不会新建Session的。该Session ID是一个从1开始依次递增的整数,当前Agent可以用最大的SessionID来表示。
每当Agent执行一个job时,Agent都会把Session ID 和Job ID 写入到表 msdb.dbo.sysjobactivity 中,因此 msdb.dbo.sysjobactivity 记录当前Agent 正在运行的每一个Job的信息(Job开始执行的时间,执行成功的最后一个StepID....),如果要查看Agent当前执行的所有Job,那么 msdb.dbo.sysjobactivity的Session ID必须是当前Agent使用的SessionID,即表msdb.dbo.syssessions中最大的SessionID。
通过 msdb.dbo.sysjobactivity 查看当前Agent Job的活动和状态,关键字段:
- session_id:Agent创建的Session ID
select j.job_id
,j.name as job_name
,iif( a.start_execution_date is not null and a.stop_execution_date is null, 'running' ,'not running') as run_status
from msdb.dbo.sysjobs j
inner join msdb.dbo.sysjobactivity a
on j.job_id = a.job_id
where session_id = ( select max(session_id) from msdb.dbo.sysjobactivity);
参考文档:
SQL Server Agent Tables (Transact-SQL)
查看Job执行的历史记录的更多相关文章
- 机器重启 查看crontab执行历史记录crontab没有执行
Sep 17 19:01:01 d run-parts(/etc/cron.hourly)[8452]: finished 0anacronSep 17 19:10:01 d CROND[9059]: ...
- mysql查看正在执行的sql语句
有2个方法: 1.使用processlist,但是有个弊端,就是只能查看正在执行的sql语句,对应历史记录,查看不到.好处是不用设置,不会保存. -- use information_schema; ...
- 两种方式:mysql查看正在执行的sql语句
mysql查看正在执行的sql语句 2015年08月21日 17:32:59 阅读数:15398 有2个方法: 1.使用processlist,但是有个弊端,就是只能查看正在执行的sql语句,对应 ...
- Windows学习总结(8)——DOS窗口查看历史执行过的命令的三种方式
在DOS窗口执行了一些列命令完成某项工作后,如果要查看都执行了那些命令,该如何办呢?(前提:DOS窗口未关闭的情况下) 一.方法一: 使用↑↓箭头上下翻看执行过的命令,此方式适宜执行命令较少的情况. ...
- 如何查看MySQL执行计划
在介绍怎么查看MySQL执行计划前,我们先来看个后面会提到的名词解释: 覆盖索引: MySQL可以利用索引返回select列表中的字段,而不必根据索引再次读取数据文件 包含所有满足查询需要的数据的索引 ...
- 查看SQL执行计划
一用户进入某界面慢得要死,查看SQL执行计划如下(具体SQL语句就不完全公布了,截断的如下): call count cpu elapsed disk ...
- MSSQL优化之——查看语句执行情况
MSSQL优化之——查看语句执行情况 在写SQL语句时,必须知道语句的执行情况才能对此作出优化.了解SQL语句的执行情况是每个写程序的人必不可少缺的能力.下面是对查询语句执行情况的方法介绍. 一.设置 ...
- 查看ORACLE执行计划的几种常用方法
SQL的执行计划实际代表了目标SQL在Oracle数据库内部的具体执行步骤,作为调优,只有知道了优化器选择的执行计划是否为当前情形下最优的执行计划,才能够知道下一步往什么方向. 执行计划的定义:执行目 ...
- 查看Oracle执行计划的几种方法
查看Oracle执行计划的几种方法 一.通过PL/SQL Dev工具 1.直接File->New->Explain Plan Window,在窗口中执行sql可以查看计划结果.其中,Cos ...
随机推荐
- RxJS + Redux + React = Amazing!(译一)
今天,我将Youtube上的<RxJS + Redux + React = Amazing!>翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: https:/ ...
- 工欲善其事,必先利其器 之 VS2013全攻略(安装,技巧,快捷键,插件)!
如有需要WPF工具的朋友可以移步 工欲善其事,必先利其器 之 WPF篇: 随着开发轨迹来看高效WPF开发的工具和技巧 之前一篇<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATI ...
- Vue + Webpack + Vue-loader 系列教程(2)相关配置篇
原文地址:https://lvyongbo.gitbooks.io/vue-loader/content/ 使用预处理器 在 Webpack 中,所有的预处理器需要和一个相应的加载器一同使用.vue- ...
- Tesseract-OCR字符识别简介
OCR(Optical Character Recognition):光学字符识别,是指对图片文件中的文字进行分析识别,获取的过程.Tesseract:开源的OCR识别引擎,初期Tesseract引擎 ...
- kafka源码分析之一server启动分析
0. 关键概念 关键概念 Concepts Function Topic 用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上. Partition 是Kafka中横向扩展和一 ...
- python基础
内容概要: 一.python2 or python3 目前大多使用python2.7,随着时间的推移,python3将会成为python爱好者的主流. python2和3区别: 1.PRINT IS ...
- Boost信号/槽signals2
信号槽是Qt框架中一个重要的部分,主要用来解耦一组互相协作的类,使用起来非常方便.项目中有同事引入了第三方的信号槽机制,其实Boost本身就有信号/槽,而且Boost的模块相对来说更稳定. signa ...
- BPM嵌入式流程解决方案分享
一.需求分析由于企业业务的独特性或者企业高层独特的管理思想,很多客户选择了自行开发业务系统的方式来实现独有的竞争力. 这类信息系统通常经过了多年的开发,伴随着企业的发展一直在不断优化,与企业的业务非常 ...
- bootstrap
访问Bootstrap中文网,下载bootstrap中文文档,选择用于生产环境的bootstrap. 在官网使用ctrl+f查找想要的内容. 这里记一下Visual Studio Code软件的用法: ...
- java I/O流
输入流(读取数据的流) BufferedInputStream---继承--->FileInputStream--继承--->InputStream------> (1)字节流操作中 ...