SQL Server 2012 catalog.executions para sysjobhistory - alguma maneira de se juntar a eles?

9

Esgotei meus recursos e não consigo encontrar uma maneira infalível de associar as tabelas ssisdb.catalog às tarefas que os executam. Tentando escrever alguns sprocs personalizados para monitorar meus tempos de execução e linhas gravadas nas tabelas de catálogos, e seria muito benéfico poder associá-los à tarefa de chamada.

Estou tentando descobrir se há alguma tabela que possa ser usada para ingressar na tabela catalog.executions no msdb.sysjobhistory. Preciso relacionar qual trabalho chamado pacote SSIS e, em seguida, usar os dados em execuções para minha análise.

Cate Donoghue
fonte

Respostas:

5

Não é para qualquer caso. Mas eu tenho um jeito:

Ele foi projetado apenas para o caso na tabela de mensagens sysjobhistory, aparece string:

"ID de execução: xxxxxxx".

Na consulta a seguir, na última coluna, extraio o ExecutionId.

No caso de ExecutionId ter um valor, ele poderá ingressar:

SELECT * 
FROM (
    SELECT 
        h.step_name,  
        h.message, 
        h.run_status, 
        h.run_date, 
        h.run_time, 
        SUBSTRING(h.message, NULLIF(CHARINDEX('Execution ID: ', h.message),0)+14 ,PATINDEX('%[^0-9]%',SUBSTRING(h.message, NULLIF(CHARINDEX('Execution ID: ', h.message),0)+14 ,20))-1) ExecutionId
    FROM MSDB.DBO.SYSJOBHISTORY h) history
LEFT JOIN 
SSISDB.CATALOG.EXECUTIONS ex on ex.execution_id = history.ExecutionId

Observe que também pode anexar estas tabelas:

LEFT JOIN SSISDB.CATALOG.OPERATION_MESSAGES om on history.ExecutionId = om.operation_id
LEFT JOIN SSISDB.CATALOG.EVENT_MESSAGES em on em.operation_id =history.ExecutionId 
Refael
fonte
2

Atualização: A resposta curta é: NÃO há maneira de associar tabelas ssisdb.catalog às tarefas que as executam. Há algumas boas informações disponíveis nesses artigos de Jamie Thomson :

Eu acho que o que você está tentando fazer já está sendo feito por Jamie. Consulte o sp_ssis_catalog para ver se ele atende às suas necessidades ou não.

Não encontrei uma maneira de associar tabelas ssisdb.catalog às tarefas que as executam. Você pode consultar o seguinte para obter algumas dicas para obter o nome do trabalho:

Email do relatório de erro do SSIS por Clark Baker

Kin Shah
fonte
0

A resposta curta é sim

SELECT TOP 200
M.[Message_time],
(SELECT TOP 1 Name from MSDB.dbo.SysJobs J INNER JOIN MSDB.dbo.SysJobSteps S (NOLOCK) ON 
        J.Job_ID = S.Job_ID WHERE S.Command like '%' +  M.[Package_Name] + '%') as Job_Name,
M.[Package_Name],
M.[Execution_path],
M.[Subcomponent_name],
M.[Message]
FROM SSISDB.[catalog].[Event_messages] M (NOLOCK)    
WHERE Event_name = 'OnError'
ORDER BY Message_time DESC
Mark Morrow
fonte