SQL Server 2012 catalog.executions a sysjobhistory: ¿alguna forma de unirse a ellos?


9

He agotado mis recursos y no puedo encontrar una manera infalible de unir las tablas ssisdb.catalog a los trabajos que las ejecutan. Intentar escribir algunos sprocs personalizados para monitorear mis tiempos de ejecución y filas escritas desde las tablas del catálogo, y sería muy beneficioso poder vincularlos con el trabajo de llamada.

Estoy tratando de averiguar si hay tablas que puedan usarse para unirse a la tabla catalog.executions a msdb.sysjobhistory. Necesito relatar qué trabajo llamó el paquete SSIS y luego usar los datos en las ejecuciones para mi análisis.

Respuestas:


5

No por ningún caso. Pero tengo alguna manera:

Está diseñado solo para el caso en la tabla de mensajes sysjobhistory, aparece cadena:

"ID de ejecución: xxxxxxx".

En la siguiente consulta, en la última columna extraigo el ExecutionId.

En el caso de que ExecutionId tenga un valor, puede unir:

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

Tenga en cuenta que también puede adjuntar estas tablas:

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 

2

Actualización: la respuesta breve es: NO hay forma de unir tablas ssisdb.catalog a los trabajos que las ejecutan. Hay buena información disponible en estos artículos de Jamie Thomson :

Supongo que lo que intentas hacer ya lo está haciendo Jamie. Consulte sp_ssis_catalog para ver si satisface sus necesidades o no.

No encontré una manera de unir las tablas ssisdb.catalog a los trabajos que las ejecutan. Puede consultar lo siguiente para obtener información sobre cómo obtener el nombre del trabajo:

Correo electrónico de informe de error de SSIS por Clark Baker


0

La respuesta corta es sí

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.