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 서비스 상태를 보여 준다.
사용 시점
아침 점검에서, 백업/유지보수 작업 알림 시, "야간 작업이 실행되었나" 확인할 때, 또는 페일오버 후 작업이 올바른 replica에서 실행되는지 확인할 때.
주의
msdb의 작업 이력은 제한되어 있다(기본 전체 1,000행, 작업당 100행). 자주 실행되는 작업이 오래된 실패를 빠르게 밀어내므로 Agent 속성에서 한도를 늘린다. message 컬럼은 4,000자에서 잘리므로 긴 출력은 작업 단계에 출력 파일을 지정한다. Agent 서비스가 중지되면 예약 작업이 실행되지 않으며 어떤 작업도 오류를 보고하지 않는다. 읽기 전용 쿼리이며 안전함.