1+ /* #info
2+
3+ # Autor
4+ Rodrigo Ribeiro Gomes
5+
6+ # Descrição
7+ Obtém informacoes dos jobs, cujo última execução foi falha.
8+ ATENÇÃO: Esse script pode demorar um pouco e dependendo da quantidade de histórico, pode causar alguma pressão no seu ambiente.
9+ Acredito que tenha um espaço para otimizações e não me lembro exatamente o porquê fiz usando row_number com partition.
10+
11+ */
12+ SELECT
13+ CONVERT (varchar (150 ),J .name ) as NomeJOB
14+ ,CONVERT (varchar (150 ),j .step_name ) as NomeSTEP
15+ ,CONVERT (datetime,j .DataStart ) as DataStart
16+ ,CONVERT (varchar (8 ),J .Duracao ) as Duracao
17+ ,CONVERT (varchar (500 ),STUFF(S .agendamentos ,1 ,3 ,' ' )) as Agendamentos
18+ ,CONVERT (int ,J .run_status ) as run_status
19+ FROM
20+ (
21+ SELECT
22+ *
23+ ,ROW_NUMBER() OVER(PARTITION BY J .name ORDER BY J .DataStart DESC ) Rn
24+ FROM
25+ (
26+ SELECT
27+ J .name
28+ ,J .job_id
29+ ,JH .step_name
30+ ,CONVERT (DATETIME, CONVERT (CHAR (8 ), run_date, 112 ) + ' '
31+ + STUFF(STUFF(RIGHT(' 000000' + CONVERT (VARCHAR (8 ), run_time), 6 ), 5 , 0 , ' :' ), 3 , 0 , ' :' ), 121 ) DataStart
32+ ,STUFF(STUFF(RIGHT(' 000000' + CONVERT (varchar (8 ),JH .run_duration ),6 ),3 ,0 ,' :' ),6 ,0 ,' :' ) as Duracao
33+ ,JH .message
34+ ,JH .run_status
35+ FROM
36+ msdb .dbo .sysjobhistory JH
37+ INNER JOIN
38+ msdb .dbo .sysjobs J
39+ ON J .job_id = JH .job_id
40+ WHERE
41+ JH .step_id <> 0
42+ ) J
43+ ) J
44+ OUTER APPLY (
45+
46+ SELECT
47+ ' | ' + S .name as ' data()'
48+ FROM
49+ msDb .dbo .sysjobschedules JS
50+ JOIN
51+ msdb .dbo .sysschedules S
52+ ON S .schedule_id = JS .schedule_id
53+ WHERE
54+ JS .job_id = J .job_id
55+ FOR XML PATH (' ' )
56+ ) S(agendamentos)
57+
58+ WHERE
59+ J .Rn = 1
60+ AND
61+ J .run_status = 0
62+ ORDER BY
63+ DataStart DESC
0 commit comments