none
Monitoramento JOB RRS feed

  • Pergunta

  • Amigos,

    estou utilizando o SQL 2005 e preciso através de uma Store Procedure pegar o resultado gerado e iniciar uma lista de jobs.

    A SP é essa abaixo e a ideia é retornar um inteiro, ou seja, se for o numero 4 posso executar todos os mesmos jobs. Porém ao executar a variavel que eu alimento @returnvalue vem zerada e o porém a execução vem com o inteiro esperado.

    Poderiam me ajudar?

    SET ANSI_NULLS ON
    SET QUOTED_IDENTIFIER ON
    
    GO
    
    ALTER PROCEDURE [dbo].[SP_MONITOR_JOB] 
    	
    AS
    BEGIN
    
    SELECT FLOW_STATUS AS STATUS_EXECUCAO
    	FROM OPENQUERY(ORCLPRD,'SELECT FLOW.FLOW_STATUS
        FROM FMSAPP.BPM_C_RUNNING_FLOWS FLOW
            INNER JOIN (SELECT MAX(FLOW_RUN_ID) FLOW_RUN_ID
                                  FROM FMSAPP.BPM_C_RUNNING_FLOWS
                                     WHERE FLOW_ID IN (SELECT FLOW_ID FROM FMSAPP.BPM_T_FLOWS WHERE FLOW_NAME LIKE ''shel%'')
                                        AND TRUNC (CREATED_DATE) = TRUNC(SYSDATE)
                                ) MAXFLOW
            ON FLOW.FLOW_RUN_ID = MAXFLOW.FLOW_RUN_ID')
    
    /**
    *** CÓDIGOS DE EXECUÇÃO
    2 - Em execucao!
    3 - ERRO!
    4 - Finalizado!
    ***
    **/
    
    END

    Porém ao executar a SP o retorno é esse:

    USE [Teste]
    GO
    
    DECLARE	@return_value int
    
    EXEC	@return_value = [dbo].[SP_MONITOR_JOB]
    
    SELECT	'Return Value' = @return_value
    
    GO

    ResultSQL

    Status_Execucao
    4
    
    Return Value
    0


    Daniel

    segunda-feira, 30 de julho de 2012 20:35

Respostas

  • Daniel,

    o seu @return_value não está recebendo o valor do Flow_Status, que pelo que eu entendi, é o que você quer de retorno.

    Ele está recebendo apenas a informação se a execução da procedure foi realizada com sucesso ou não.

    Para o que você quer, você precisa especificar um parametro na tua proc com a clausula OUTPUT.

    Algo como:

    ALTER PROCEDURE [dbo].[SP_MONITOR_JOB] @return_value int OUTPUT
    AS 
    BEGIN
    SELECT @return_value = FLOW_STATUS as <restante da tua consulta>
    END

    Espero que tenha te ajudado.

    []'s

    • Marcado como Resposta dralves terça-feira, 31 de julho de 2012 12:53
    terça-feira, 31 de julho de 2012 11:02

Todas as Respostas

  • Daniel,

    o seu @return_value não está recebendo o valor do Flow_Status, que pelo que eu entendi, é o que você quer de retorno.

    Ele está recebendo apenas a informação se a execução da procedure foi realizada com sucesso ou não.

    Para o que você quer, você precisa especificar um parametro na tua proc com a clausula OUTPUT.

    Algo como:

    ALTER PROCEDURE [dbo].[SP_MONITOR_JOB] @return_value int OUTPUT
    AS 
    BEGIN
    SELECT @return_value = FLOW_STATUS as <restante da tua consulta>
    END

    Espero que tenha te ajudado.

    []'s

    • Marcado como Resposta dralves terça-feira, 31 de julho de 2012 12:53
    terça-feira, 31 de julho de 2012 11:02
  • Logan,

    Vlw funcionou na boa. Cara após essa validação da SP, preciso iniciar a execução de uma lista de jobs, porém quando implemento o SP_START_JOB para a minha lista ele executa tudo ao mesmo tempo. O que gostaria de fazer é executar essa lista um de cada ou executar alguns de uma vez só. Isso é possível?

    Segue o procedimento que construi?

    USE [Teste]
    GO
    
    DECLARE	@RETURN_VALUE INT
    DECLARE @RC INT
    
    EXEC @RC = [DBO].[SP_MONITOR_JOB] @RETURN_VALUE OUTPUT
    
    
    IF (@RETURN_VALUE IS NULL OR @RETURN_VALUE  = '' OR @RETURN_VALUE = 2 OR @RETURN_VALUE = 3)
    	INSERT INTO dbo.T_MONITOR_JOBS (DT_EXE, STATUS) VALUES(GETDATE(), @RETURN_VALUE)
    	
    IF @RETURN_VALUE = 4
    	INSERT INTO dbo.T_MONITOR_JOBS (DT_EXE, STATUS) VALUES(GETDATE(), @RETURN_VALUE)
    
    	EXEC MSDB..SP_START_JOB N'CARREGA_TABELA_SGF_T_WF_HIST_AVISOSINISTRO'
    	EXEC MSDB..SP_START_JOB N'CARREGA_TABELA_SGF_T_WF_HIST_PESSOAS'
    	EXEC MSDB..SP_START_JOB N'CARREGA_TABELA_SGF_T_WF_AVISOSINISTRO'
    	EXEC MSDB..SP_START_JOB N'CARREGA_TABELA_SGF_T_WF_PESSOAS'
    	EXEC MSDB..SP_START_JOB N'CARREGA_TABELA_AUXILIAR_MAX_DT_CONCLUIR_REGULACAO'
    	EXEC MSDB..SP_START_JOB N'CARREGA_TABELA_STAUTS_ATUAL_SINISTRO'
    	EXEC MSDB..SP_START_JOB N'CARREGA_TABELA_SGF_T_PROSCORE'
    	EXEC MSDB..SP_START_JOB N'CARREGA_TABELA_IM_C_INPUT'
    	EXEC MSDB..SP_START_JOB N'CARREGA_TABELA_ERRO_WEB_SERVICE'
    	EXEC MSDB..SP_START_JOB N'CARREGA_TABELA_AUXILIAR_CONSULTA_PROSCORE'
    	EXEC MSDB..SP_START_JOB N'CARREGA_TABELA_AUXILIAR_CONSULTA_PROSCORE_COM_DADOS_DE_PESSOA'
    
    /**
    *** CÓDIGOS DE EXECUÇÃO
    2 - Em execucao!
    3 - ERRO!
    4 - Finalizado!
    ***
    **/
    
    GO
    SELECT * FROM T_MONITOR_JOBS


    Daniel

    terça-feira, 31 de julho de 2012 13:43
  • Então Daniel,

    Possível, é... encontrei esse link, que talvez possa te ajudar:

    http://www.mssqltips.com/sqlservertip/2167/custom-spstartjob-to-delay-next-task-until-sql-agent-job-has-completed

    Não sei como será o uso no teu ambiente, mas eu tentaria colocar essas chamadas num pacote do SSIS para melhorar o controle do fluxo das informações. 

    terça-feira, 31 de julho de 2012 13:59
  • Pensei nisso. Vou analisar o link.

    Obrigado.


    Daniel

    terça-feira, 31 de julho de 2012 14:45
  • Logan,

    Não tive sucesso com o link. Ele acaba executando todos os jobs de uma vez só.

    Poderia me ajudar a construir isso no SSIS?

    Abs Daniel


    Daniel

    quarta-feira, 1 de agosto de 2012 13:12
  • Daniel,

    No Visual Studio, abra um novo projeto do SSIS e, então, arraste os componentes "Execute SQL Server Agent Job Task".

    Selecione o job e repita o procedimento para os demais jobs desejados.

    Não se esqueça de ligar os componentes arrastados usando as setas, e marcá-las como contraints para que o próximo item seja executado somente em caso de término.


    quarta-feira, 1 de agosto de 2012 14:35
  • Logan,

    Blz isso eu fiz. Mais estou com dúvida na execução da SP, pois é ela que irá executar ou não os JOBS?

    Como faço isso? Preciso pegar o parametro que ela retorna validar se vou executar os jobs ou não. Ah ela executa alguns inserts também...

    Logan desde já obrigado pela ajuda.


    Daniel

    quarta-feira, 1 de agosto de 2012 18:53
  • Alguem poderia me ajudar?

    Att:Daniel


    Daniel

    quarta-feira, 1 de agosto de 2012 20:26
  • Daniel,

    Ainda está precisando da ajuda no SSIS ??

    QQ coisa me avisa. que te ajudo.


    Luciano Montenegro

    terça-feira, 9 de outubro de 2012 19:34