SQL server作业历史记录 - 作业执行ID?

时间:2018-02-06 19:05:11

标签: sql sql-server sql-agent-job sql-agent log-viewer

我正在试图弄清楚SQL服务器如何将其作业历史记录层次结构分组,以将结果与所有作业步骤相关联。我正在使用数据可视化工具来跟踪仪表板中的错误,但整个(工作结果)步骤让我发疯。

给定作业执行中的所有步骤是否没有ID链接?我认为instance_id + max(step_id)给出instance_id step_id = 0(作业结果)。鉴于日志文件查看器的结果是可扩展的层次结构,我认为必须有一些一致的方法来表示数据库中的层次结构。

使用job_id + run_date将适用于每天只发生一次所有步骤在同一天完成的作业,但是当作业每天运行多次时会发生故障。

基本上我想将作业历史表连接到自己,在那里我将作业执行的作业结果加入到每个步骤中,这样我就可以构建一个层次结构,就像在我的可视化工具中的日志查看器中看到的那样。

日志查看器示例图像:

enter image description here

有什么想法吗?

我找到了解决方案,关键是步骤将在作业开始时间和作业运行时间内:

`

select *
from
(
select sjh.run_date job_run_date
    , jobs.name job_name
    ,dbo.agent_datetime(sjh2.run_date,sjh2.run_time) job_start_time
    ,CASE sjh2.run_status WHEN 0 THEN 'Job Failed' WHEN 1 THEN 'Job Succeeded' END job_status
    ,sjh2.message job_message
    ,STUFF(STUFF(STUFF(RIGHT(REPLICATE('0', 8) + CAST(sjh2.run_duration as varchar(8)), 8), 3, 0, ':'), 6, 0, ':'), 9, 0, ':') 'job_run_duration'
    , sjh.step_id
    , sjh.step_name
    ,dbo.agent_datetime(sjh.run_date,sjh.run_time) step_run_time
    ,CASE sjh.run_status WHEN 0 THEN 'Step Failed' WHEN 1 THEN 'Step Succeeded' END step_status
    ,sjh.message step_message
    ,STUFF(STUFF(STUFF(RIGHT(REPLICATE('0', 8) + CAST(sjh.run_duration as varchar(8)), 8), 3, 0, ':'), 6, 0, ':'), 9, 0, ':') 'step_run_duration'
--  , *
from sysjobhistory sjh
join sysjobs jobs on jobs.job_id = sjh.job_id
join sysjobhistory sjh2 on sjh2.run_date = sjh.run_date 
                       and sjh2.job_id = sjh.job_id 
                       and sjh2.step_id = 0
                       and sjh.run_time >= sjh2.run_time
                       and sjh.run_time <= sjh2.run_time + sjh2.run_duration
) t1
order by job_run_date desc, job_name desc, job_start_time, step_id

`

0 个答案:

没有答案