DBAtlas · Атлас эксплуатации баз данных

История сбоев заданий SQL Agent и статус последнего запуска

SQL ServerSQL Agent

Команда

-- 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;

Что делает

Показывает шаги заданий, завершившиеся сбоем или отменённые за последние 24 часа, с сообщением об ошибке; последний результат каждого задания, выполняется ли оно сейчас и следующий запуск по расписанию; а также состояние службы Agent.

Когда использовать

При утренней проверке, при оповещении о задании резервного копирования/обслуживания, для вопроса "отработало ли ночное задание" или после отработки отказа, чтобы убедиться, что задания выполняются на нужной реплике.

Внимание

История заданий в msdb ограничена (по умолчанию всего 1,000 строк, 100 на задание); часто выполняемые задания быстро вытесняют старые сбои, поэтому увеличьте лимит в свойствах Agent. Столбец message обрезается до 4,000 символов; для длинного вывода задайте выходной файл на шаге задания. Если служба Agent остановлена, ни одно запланированное задание не выполняется и ни одно не сообщает об ошибке. Запрос только на чтение; безопасно.

Открыть в DBAtlas →