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.

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 

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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.