dbo.sysjobhistory (Transact-SQL)

S’applique à :SQL ServerAzure SQL Managed Instance

Contient des informations sur l’exécution des travaux planifiés par l’Agent SQL Server.

Remarque

Dans la plupart des cas, les données sont mises à jour uniquement une fois l’étape de travail terminée, et la table ne contient généralement aucun enregistrement pour les étapes de travail en cours. Dans certains cas, les processus sous-jacents fournissent des informations sur les étapes de travail en cours.

Cette table est stockée dans la msdb base de données.

Nom de la colonne Type de données Description
instance_id int Identificateur unique de la ligne.
job_id uniqueidentifier ID de travail.
step_id int ID de l'étape dans le travail
step_name sysname Nom de l’étape.
sql_message_id int ID d’un message d’erreur SQL Server retourné si le travail a échoué.
sql_severity int Gravité de toute erreur SQL Server.
message nvarchar(4000) Texte, le cas échéant, d’une erreur SQL Server.
run_status int État de l'exécution du travail :

0 = Échec
1 = Réussite
2 = Nouvelle tentative
3 = Annulé
4 = En cours
run_date int Date de l’exécution du travail ou de l’étape démarrée, au yyyyMMdd format. Pour un historique en cours, cette valeur correspond à la date et à l’heure de l’écriture de l’historique.
run_time int Heure de démarrage du travail ou de l’étape au HHmmss format.
run_duration int Temps écoulé dans l’exécution du travail ou de l’étape au HHmmss format pendant des périodes allant jusqu’à 24 heures. Recherchez du code pour traduire des durées d’exécution plus longues dans l’exemple.
operator_id_emailed int Identificateur de l'opérateur averti de la fin du travail.
operator_id_netsent int Identificateur de l'opérateur averti par un message de la fin du travail.
operator_id_paged int Identificateur de l'opérateur averti par radiomessagerie de la fin du travail.
retries_attempted int Nombre de nouvelles tentatives pour le travail ou l'étape.
server sysname Nom du serveur sur lequel le travail a été exécuté.

Exemples

La requête Transact-SQL suivante convertit les colonnes et run_time les run_date colonnes en colonne datetime nommée LastRunStartDateTime. La run_duration colonne est convertie en colonne int nommée LastRunDurationSeconds. Ces deux colonnes sont ensuite utilisées pour calculer le LastRunFinishDateTime. La run_duration colonne est également convertie en format plus convivial. Vous pouvez exécuter le script dans SQL Server Management Studio ou Azure Data Studio.

SET NOCOUNT ON;

SELECT sj.name AS Name,
    sh.step_name AS StepName,
    shp.LastRunStartDateTime,
    DATEADD(SECOND, shp.LastRunDurationSeconds, shp.LastRunStartDateTime) AS LastRunFinishDateTime,
    shp.LastRunDurationSeconds,
    CASE
        WHEN sh.run_duration > 235959
            THEN CAST((CAST(LEFT(CAST(sh.run_duration AS VARCHAR),
                LEN(CAST(sh.run_duration AS VARCHAR)) - 4) AS INT) / 24) AS VARCHAR)
                    + '.' + RIGHT('00' + CAST(CAST(LEFT(CAST(sh.run_duration AS VARCHAR),
                LEN(CAST(sh.run_duration AS VARCHAR)) - 4) AS INT) % 24 AS VARCHAR), 2)
                    + ':' + STUFF(CAST(RIGHT(CAST(sh.run_duration AS VARCHAR), 4) AS VARCHAR(6)), 3, 0, ':')
        ELSE STUFF(STUFF(RIGHT(REPLICATE('0', 6) + CAST(sh.run_duration AS VARCHAR(6)), 6), 3, 0, ':'), 6, 0, ':')
        END AS [LastRunDuration (d.HH:MM:SS)],
    DATEADD(SECOND, shp.LastRunDurationSeconds, shp.LastRunStartDateTime) AS LastRunFinishDateTime
FROM msdb.dbo.sysjobs sj
INNER JOIN msdb.dbo.sysjobhistory sh ON sj.job_id = sh.job_id
CROSS APPLY (SELECT DATETIMEFROMPARTS(sh.run_date / 10000, -- years
        sh.run_date % 10000 / 100, -- months
        sh.run_date % 100, -- days
        sh.run_time / 10000, -- hours
        sh.run_time % 10000 / 100, -- minutes
        sh.run_time % 100, -- seconds
        0 -- milliseconds
    ) AS LastRunStartDateTime,
    (sh.run_duration / 10000) * 3600 -- convert hours to seconds, can be greater than 24
    + ((sh.run_duration % 10000) / 100) * 60 -- convert minutes to seconds
    + (sh.run_duration % 100) AS LastRunDurationSeconds
) AS shp;
GO