История заданий сервера SQL - идентификатор выполнения задания?

Я пытаюсь выяснить, как SQL-сервер группирует свою иерархию истории заданий, чтобы связать результат со всеми этапами задания. Я использую инструмент визуализации данных для отслеживания ошибок в панели управления, но весь этот шаг (результат работы) сводит меня с ума.

Нет ли идентификатора, связывающего все этапы выполнения заданий? Я полагаю, что instance_id + max(step_id) дает instance_id из step_id = 0 (Результат работы). Учитывая, что средство просмотра файлов журнала имеет результаты в расширяемой иерархии, я полагаю, что должен быть какой-то последовательный способ представления этой иерархии в базе данных.

С использованием job_id + run_date будет работать над заданиями, которые выполняются только один раз в день, когда все шаги выполняются в один и тот же день, но если задания выполняются несколько раз в день, это приводит к поломке.

По сути, я хочу присоединить таблицу истории заданий к себе, где у меня есть результат задания для выполнения задания, присоединенный к каждому шагу, чтобы я мог построить иерархию, подобную той, которая отображается в средстве просмотра журнала в моем инструменте визуализации.

Пример просмотра журнала:

введите описание изображения здесь

Есть идеи?

Я нашел решение, ключ в том, что шаги будут в пределах времени начала работы и продолжительности работы:

`

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 ответов

Другие вопросы по тегам