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;