在SQL Server 2008 R2中,有一个sysjobhistory表。如果一个工作有几个步骤,那么它们都按照执行/完成的顺序列在那里。因此,如果没有并行运行的作业,如果所有内容都按顺序执行,我可以使用instance_id(降序)和step_id轻松查看属于一次执行作业的所有步骤:
instance_id job_id step_id step_name run_status
-------------------------------------------------------
15 aaa 0 (Job outcome) 1
14 aaa 3 step a3 1
13 aaa 2 step a2 1
12 aaa 1 step a1 1
11 bbb 0 (Job outcome) 1
10 bbb 2 step b1 1
9 bbb 1 step b2 1
8 aaa 0 (Job outcome) 1
7 aaa 3 step a3 1
6 aaa 2 step a2 1
5 aaa 1 step a1 1
在这里,我可以轻松创建一个查询,以按执行顺序显示作业及其步骤。所以使用上面的数据,我想要实现的是这样的结果(我可以使用游标和临时表来创建我自己的排序顺序):
instance_id job_id step_id step_name run_status
-------------------------------------------------------
15 aaa 0 (Job outcome) 1
12 aaa 1 step a1 1
13 aaa 2 step a2 1
14 aaa 3 step a3 1
11 bbb 0 (Job outcome) 1
9 bbb 1 step b1 1
10 bbb 2 step b2 1
8 aaa 0 (Job outcome) 1
5 aaa 1 step a1 1
6 aaa 2 step a2 1
7 aaa 3 step a3 1
首先按结果执行日期/时间顺序,然后按升序排列该特定作业的每个步骤。
但是,如果一项工作在另一份工作开始时仍在运作,那就不那么容易了:
instance_id job_id step_id step_name run_status
-------------------------------------------------------
31 aaa 0 (Job outcome) 1
30 aaa 1 step a1 1
29 bbb 0 (Job outcome) 1
28 bbb 1 step b1 1
27 bbb 2 step b2 1
26 aaa 2 step a2 1
25 aaa 3 step a3 1
我怎么知道,例如instance_ids 31,30,26和25属于同一个作业aaa的执行?我可以在SSMS中查看一个日志文件,它显示我想要的 - 作业本身(带有step_id 0的记录)按执行日期排序,当我扩展作业时,它的所有步骤。因此,历史记录属于单个执行作业的信息是以某种方式存在的。我怎样才能获得这些信息?