This scripts can be used, for job control, this script return result from execution steps with sucess or failure.
EXEC MONITORIA_JOB 'JOB - SATELITE - TESTE EXECUÇÃO'
This scripts can be used, for job control, this script return result from execution steps with sucess or failure.
EXEC MONITORIA_JOB 'JOB - SATELITE - TESTE EXECUÇÃO'
ALTER PROCEDURE MONITORIA_JOB @JOB_NAME VARCHAR(200)
/*
DATA: 24/10/2014
DESENVOLVIDO POR: JEFFERSON C. G.
FUNÇÃO: A PROCEDURE SERÁ UTILIZADA PARA EXECUTAR OS JOBS SQL ATRAVÉS DO TIVOLI, E CONTROLAR SE O JOB FOI EXECUTADO COM SUCESSO OU FALHA.
EXEMPLO DE EXECUÇÃO: EXEC MONITORIA_JOB 'JOB - SATELITE - TESTE EXECUÇÃO'
*/
AS
--COMANDO PARA NÃO EXIBIR RETORNOS;
SET NOCOUNT ON;
--DECLARAÇÃO DAS VARIAVEIS;
DECLARE
@QTDE_STEPINT
,@QTDE_STEP_EXECINT
,@ERRO_STEPINT
,@HOR_ULT_EXECUCAOVARCHAR(25)
-- ,@JOB_NAMEVARCHAR(200)
--CARREGANDO OS PARAMETROS DAS VARIAVEIS;
--SET @JOB_NAME = 'JOB - SATELITE - TESTE EXECUÇÃO';
SET @QTDE_STEP_EXEC = 0;
SET @ERRO_STEP = 0;
SET @HOR_ULT_EXECUCAO = CONVERT(VARCHAR(19),GETDATE(),121);
--PRINT @JOB_NAME;
--PRINT @HOR_ULT_EXECUCAO;
--ARMAZENA NA VARIAVEL @QTDE_STEP A QUANTIDADE DE STEPS EXISTENTES NO JOB
SELECT
@QTDE_STEP = COUNT(1) + 1
FROM
MSDB..SYSJOBSTEPS S
INNER JOIN MSDB .. SYSJOBS J
ON S.JOB_ID = J.JOB_ID
WHERE
J.NAME = @JOB_NAME
--DELAY PARA GERAR UMA DIFERENÇA DE 3 SEGUNDOS ENTRE A COLETA DO GETDATE() PARA VARIAVEL @HOR_ULT_EXECUCAO E A EXECUÇÃO DO JOB
WAITFOR DELAY '00:00:03'
--FAZ A EXECUÇÃO DO JOB
EXEC MSDB.DBO.SP_START_JOB @JOB_NAME
--WHILE PARA INFORMAR QUE O JOB FOI EXECUTADO OU APRESENTOU ERRO!
WHILE (@QTDE_STEP != @QTDE_STEP_EXEC AND @ERRO_STEP = 0)
BEGIN
--ARMAZENA NA VARIAVEL @QTDE_STEP_EXEC OS STEPS QUE FORAM EXECUTADOS COM SUCESSO
SELECT @QTDE_STEP_EXEC = COUNT(1)
FROM MSDB .. SYSJOBHISTORY H
INNER JOIN MSDB .. SYSJOBS J
ON H.JOB_ID = J.JOB_ID
WHERE J.NAME = @JOB_NAME
AND CONVERT(DATETIME, RTRIM(H.RUN_DATE)) + (H.RUN_TIME * 9 + H.RUN_TIME % 10000 * 6 + H.RUN_TIME % 100 * 10) / 216E4 >= @HOR_ULT_EXECUCAO
--ARMAZENA NA VARIAVEL @ERRO_STEP O STEPS QUE APRESENTOU ERRO
SELECT @ERRO_STEP = COUNT(1)
FROM MSDB .. SYSJOBHISTORY H
INNER JOIN MSDB .. SYSJOBS J
ON H.JOB_ID = J.JOB_ID
WHERE J.NAME = @JOB_NAME
AND CONVERT(DATETIME, RTRIM(H.RUN_DATE)) + (H.RUN_TIME * 9 + H.RUN_TIME % 10000 * 6 + H.RUN_TIME % 100 * 10) / 216E4 >= @HOR_ULT_EXECUCAO
AND RUN_STATUS = 0
--PRINT @QTDE_STEP
--PRINT @QTDE_STEP_EXEC
--PRINT @ERRO_STEP
--PRINT CONVERT(VARCHAR(19),GETDATE(),121);
END
--VERIFICA SE O JOB FOI EXECUTADO COM ERRO OU SUCESSO E EXIBE MENSAGEM DE ERRO OU SUCESSO
IF (SELECT COUNT(1)
FROM MSDB .. SYSJOBHISTORY H
INNER JOIN MSDB .. SYSJOBS J
ON H.JOB_ID = J.JOB_ID
WHERE J.NAME = @JOB_NAME
AND CONVERT(DATETIME, RTRIM(H.RUN_DATE)) + (H.RUN_TIME * 9 + H.RUN_TIME % 10000 * 6 + H.RUN_TIME % 100 * 10) / 216E4 >= @HOR_ULT_EXECUCAO
AND RUN_STATUS = 0 ) > 0
BEGIN
--SE O JOB APRESENTOU ERRO EXIBE O RESULTADO ABAIXO;
SELECT'O Job "' + J.NAME +
'" Step "' + CONVERT(VARCHAR(3), H.STEP_ID) + ' - ' + H.STEP_NAME +
'" foi executado com FALHA as '
+ CONVERT(VARCHAR(19), CONVERT(DATETIME, RTRIM(H.RUN_DATE)) + (H.RUN_TIME * 9 + H.RUN_TIME % 10000 * 6 + H.RUN_TIME % 100 * 10) / 216E4, 121) +
'! MENSAGEM DE ERRO: "' + h.message + '".' MENSAGEM
, H.RUN_STATUS EXECUCAO
FROM
MSDB .. SYSJOBHISTORY H
INNER JOIN (SELECT h.job_id, Max(step_id) step_id
FROM MSDB .. SYSJOBHISTORY H
INNER JOIN MSDB .. SYSJOBS J
ON H.JOB_ID = J.JOB_ID
WHERE J.NAME = @JOB_NAME
AND CONVERT(DATETIME, RTRIM(H.RUN_DATE)) + (H.RUN_TIME * 9 + H.RUN_TIME % 10000 * 6 + H.RUN_TIME % 100 * 10) / 216E4 >= @HOR_ULT_EXECUCAO
AND RUN_STATUS = 0
GROUP BY H.JOB_ID) S
ON (H.JOB_ID = S.JOB_ID AND H.STEP_ID = S.STEP_ID)
INNER JOIN MSDB .. SYSJOBS J
ON H.JOB_ID = J.JOB_ID
WHERE J.NAME = @JOB_NAME
AND CONVERT(DATETIME, RTRIM(H.RUN_DATE)) + (H.RUN_TIME * 9 + H.RUN_TIME % 10000 * 6 + H.RUN_TIME % 100 * 10) / 216E4 >= @HOR_ULT_EXECUCAO
ORDER BY H.STEP_ID
END
ELSE
BEGIN
--SE O JOB FOI EXECUTADO COM SUCESSO APRESENTA O RESULTADO ABAIXO
SELECT
'O Job "' + J.NAME +
'" Step "' + CONVERT(VARCHAR(3), H.STEP_ID) + ' - ' + H.STEP_NAME +
'" foi executado com SUCESSO as '
+ CONVERT(VARCHAR(19), CONVERT(DATETIME, RTRIM(H.RUN_DATE)) + (H.RUN_TIME * 9 + H.RUN_TIME % 10000 * 6 + H.RUN_TIME % 100 * 10) / 216E4, 121) + '!' MENSAGEM
, H.RUN_STATUS EXECUCAO
FROM
MSDB .. SYSJOBHISTORY H
INNER JOIN MSDB..SYSJOBSTEPS S
ON (H.JOB_ID = S.JOB_ID AND H.STEP_ID = S.STEP_ID)
INNER JOIN MSDB .. SYSJOBS J
ON H.JOB_ID = J.JOB_ID
WHERE J.NAME = @JOB_NAME
AND CONVERT(DATETIME, RTRIM(H.RUN_DATE)) + (H.RUN_TIME * 9 + H.RUN_TIME % 10000 * 6 + H.RUN_TIME % 100 * 10) / 216E4 >= @HOR_ULT_EXECUCAO
ORDER BY H.STEP_ID
END
SET NOCOUNT OFF;