Technical Article

Start Job and Wait

,

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_STEP			INT
	   ,@QTDE_STEP_EXEC		INT
	   ,@ERRO_STEP			INT
	   ,@HOR_ULT_EXECUCAO	VARCHAR(25)
--	   ,@JOB_NAME			VARCHAR(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;

Rate

1 (2)

You rated this post out of 5. Change rating

Share

Share

Rate

1 (2)

You rated this post out of 5. Change rating