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_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;

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