Historique des échecs de jobs SQL Agent et état de la dernière exécution
SQL ServerSQL AgentCommande
-- Job steps that failed / were cancelled in the last 24 hours:
SELECT j.name AS job_name, h.step_id, h.step_name,
msdb.dbo.agent_datetime(h.run_date, h.run_time) AS run_at,
STUFF(STUFF(RIGHT('000000' + CAST(h.run_duration AS VARCHAR(6)), 6), 3, 0, ':'), 6, 0, ':') AS duration_hhmmss,
CASE h.run_status WHEN 0 THEN 'Failed' WHEN 1 THEN 'Succeeded' WHEN 2 THEN 'Retry'
WHEN 3 THEN 'Canceled' WHEN 4 THEN 'In progress' END AS status,
h.sql_message_id, h.sql_severity,
LEFT(h.message, 500) AS message
FROM msdb.dbo.sysjobhistory h
JOIN msdb.dbo.sysjobs j ON j.job_id = h.job_id
WHERE h.run_status IN (0, 3)
AND msdb.dbo.agent_datetime(h.run_date, h.run_time) >= DATEADD(HOUR, -24, GETDATE())
ORDER BY run_at DESC;
-- Each job's last outcome, running now, next run:
SELECT j.name, j.enabled,
CASE lr.run_status WHEN 0 THEN 'Failed' WHEN 1 THEN 'Succeeded' WHEN 3 THEN 'Canceled' END AS last_outcome,
lr.run_at AS last_run_at,
CASE WHEN a.start_execution_date IS NOT NULL AND a.stop_execution_date IS NULL THEN 'RUNNING' END AS running_now,
a.next_scheduled_run_date
FROM msdb.dbo.sysjobs j
LEFT JOIN msdb.dbo.sysjobactivity a
ON a.job_id = j.job_id AND a.session_id = (SELECT MAX(session_id) FROM msdb.dbo.syssessions)
OUTER APPLY (SELECT TOP (1) h.run_status, msdb.dbo.agent_datetime(h.run_date, h.run_time) AS run_at
FROM msdb.dbo.sysjobhistory h
WHERE h.job_id = j.job_id AND h.step_id = 0
ORDER BY h.instance_id DESC) lr
ORDER BY j.name;
-- Is the Agent service running:
SELECT servicename, status_desc, startup_type_desc FROM sys.dm_server_services;Ce que fait la commande
Affiche les étapes de jobs en échec ou annulées au cours des dernières 24 heures avec leur message d'erreur ; le dernier résultat de chaque job, s'il est en cours d'exécution et sa prochaine exécution planifiée ; ainsi que l'état du service Agent.
Quand l'utiliser
Lors du contrôle du matin, sur une alerte de job de sauvegarde/maintenance, pour savoir "le job de nuit a-t-il tourné", ou après un basculement pour vérifier que les jobs s'exécutent sur le bon réplica.
Attention
L'historique des jobs dans msdb est limité (par défaut 1,000 lignes au total, 100 par job) ; les jobs fréquents évincent rapidement les anciens échecs, augmentez donc la limite dans les propriétés de l'Agent. La colonne message est tronquée à 4,000 caractères ; définissez un fichier de sortie sur l'étape du job pour les sorties longues. Si le service Agent est arrêté, aucun job planifié ne s'exécute et aucun ne signale d'erreur. Requête en lecture seule ; sûre.