SQL Server 2012 catalog.executions to sysjobhistory - un moyen de les rejoindre?

9

J'ai épuisé mes ressources et je ne trouve pas de moyen infaillible de joindre les tables ssisdb.catalog aux travaux qui les exécutent. Essayer d'écrire des sprocs personnalisés pour surveiller mes temps d'exécution et mes lignes écrites à partir des tables de catalogue, et il serait grandement avantageux de pouvoir les lier avec le travail appelant.

J'essaie de savoir s'il existe des tables qui peuvent être utilisées pour joindre la table catalog.executions à msdb.sysjobhistory. J'ai besoin de relier quel travail appelé le package SSIS, puis d'utiliser les données dans les exécutions pour mon analyse.

Cate Donoghue
la source

Réponses:

5

Pas du tout. Mais j'ai un moyen:

Il est conçu uniquement pour le cas dans la table des messages sysjobhistory, apparaît une chaîne:

"ID d'exécution: xxxxxxx".

Dans la requête suivante, dans la dernière colonne, j'extrais l'ExecutionId.

Dans le cas où ExecutionId a une valeur, il peut rejoindre:

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

Notez que peut également joindre ces tableaux:

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
la source
2

Mise à jour: La réponse courte est: il n'y a AUCUN moyen de joindre les tables ssisdb.catalog aux travaux qui les exécutent. Il y a de bonnes informations disponibles dans ces articles de Jamie Thomson :

Je suppose que ce que vous essayez de faire est déjà fait par Jamie. Reportez-vous au sp_ssis_catalog pour voir s'il répond à vos besoins ou non.

Je n'ai pas trouvé de moyen de joindre les tables ssisdb.catalog aux travaux qui les exécutent. Vous pouvez consulter les informations suivantes pour obtenir des informations sur le nom du travail:

Courriel de rapport d'erreur SSIS par Clark Baker

Kin Shah
la source
0

La reponse courte est oui

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
la source