Fehlerhistorie der SQL-Agent-Jobs und Status des letzten Laufs
SQL ServerSQL AgentBefehl
-- 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;Was es tut
Zeigt die in den letzten 24 Stunden fehlgeschlagenen oder abgebrochenen Job-Schritte mit ihrer Fehlermeldung; das letzte Ergebnis jedes Jobs, ob er gerade läuft, und seinen nächsten geplanten Lauf; sowie den Zustand des Agent-Dienstes.
Wann einsetzen
Beim morgendlichen Check, bei einem Alarm eines Backup-/Wartungsjobs, für "ist der nächtliche Job gelaufen" oder nach einem Failover, um zu prüfen, ob die Jobs auf der richtigen Replica laufen.
Vorsicht
Die Job-Historie in msdb ist begrenzt (standardmäßig insgesamt 1.000 Zeilen, 100 pro Job); häufig laufende Jobs verdrängen alte Fehler schnell, erhöhe das Limit daher in den Agent-Eigenschaften. Die Spalte message wird bei 4.000 Zeichen abgeschnitten; für lange Ausgaben eine Ausgabedatei am Job-Schritt festlegen. Ist der Agent-Dienst gestoppt, läuft kein geplanter Job und keiner meldet einen Fehler. Reine Leseabfrage; sicher.