실패한 SQL 작업을 표시하는 쿼리 란 무엇입니까?


답변:


12

작업이 출력 파일로 이동하도록 구성 할 수 있기 때문에 하나의 쿼리로 작업 정보를 "모두"얻을 수 있다고 생각하지 않습니다. 출력 파일은 때때로보고되거나 msdb테이블에 기록되는 것보다 많은 정보를 얻을 수 있습니다.

그러나 SSMS를 통해 작업 기록을보고 찾은보기는이 쿼리를 사용하여 실패한 작업 만 리턴 할 수 있습니다 (예 : 작업에 2 단계가 있고 두 번째 실패한 경우이 쿼리는 두 단계를 모두 리턴 함).

select j.name
    ,js.step_name
    ,jh.sql_severity
    ,jh.message
    ,jh.run_date
    ,jh.run_time
FROM msdb.dbo.sysjobs AS j
INNER JOIN msdb.dbo.sysjobsteps AS js
   ON js.job_id = j.job_id
INNER JOIN msdb.dbo.sysjobhistory AS jh
   ON jh.job_id = j.job_id AND jh.step_id = js.step_id
WHERE jh.run_status = 0

여기에 이미지 설명을 입력하십시오


6

SQL Server에서 사용 가능한 표준 보고서를 통해이 정보를 얻을 수 있습니다.

SQL Server 에이전트> 표준 보고서를 마우스 오른쪽 단추로 클릭하고 작업 실행 "실패한 시간 또는 많은 시간이 걸리는 시간"과 같은 원하는 보고서를 선택하십시오. 필요에 따라 보고서를 선택하십시오.

또는,

아래 스크립트를 사용하여 지난 24 시간 동안 실패한 작업을 찾을 수 있습니다.

-- Variable Declarations 

DECLARE @PreviousDate datetime  
DECLARE @Year VARCHAR(4)   
DECLARE @Month VARCHAR(2)  
DECLARE @MonthPre VARCHAR(2)  
DECLARE @Day VARCHAR(2)  
DECLARE @DayPre VARCHAR(2)  
DECLARE @FinalDate INT  

-- Initialize Variables  
SET @PreviousDate = DATEADD(dd, -1, GETDATE()) -- Last 1 day   
SET @Year = DATEPART(yyyy, @PreviousDate)   
SELECT @MonthPre = CONVERT(VARCHAR(2), DATEPART(mm, @PreviousDate))  
SELECT @Month = RIGHT(CONVERT(VARCHAR, (@MonthPre + 1000000000)),2)  
SELECT @DayPre = CONVERT(VARCHAR(2), DATEPART(dd, @PreviousDate))  
SELECT @Day = RIGHT(CONVERT(VARCHAR, (@DayPre + 1000000000)),2)  
SET @FinalDate = CAST(@Year + @Month + @Day AS INT)  

-- Final Logic 

SELECT   j.[name],  
         s.step_name,  
         h.step_id,  
         h.step_name,  
         h.run_date,  
         h.run_time,  
         h.sql_severity,  
         h.message,   
         h.server  
FROM     msdb.dbo.sysjobhistory h  
         INNER JOIN msdb.dbo.sysjobs j  
           ON h.job_id = j.job_id  
         INNER JOIN msdb.dbo.sysjobsteps s  
           ON j.job_id = s.job_id 
           AND h.step_id = s.step_id  
WHERE    h.run_status = 0 -- Failure  
         AND h.run_date > @FinalDate  
ORDER BY h.instance_id DESC  

보고서로 정보가 필요한 경우이 링크 의 코드를 사용 하십시오.


팁 주셔서 감사합니다. 이것이 바로 내가 찾던 것입니다. 동일한 결과를 얻기 위해 변수를 약간 단순화 할 수 있다고 생각합니다.DECLARE @FinalDate INT; -- Initialize Variables SET @FinalDate = CAST(CONVERT(VARCHAR(10), DATEADD(dd, -1, GETDATE()), 112) AS INT) -- Yesterday's date as Integer in YYYYMMDD format -- Final Logic .... no change

1

지난 24 시간 동안 모든 작업 오류가 발생하도록 Shawn Melton의 코드를 약간 수정했습니다. 조인에 빠진 진술이 있었지만, 나는 그것을 고쳤다. 많은 감사합니다, 훌륭한 물건!


/*  Select all jobs with an error in the past 24 hours */
SELECT MSDB.dbo.agent_datetime(jh.run_date,jh.run_time) as date_time
    ,j.name as job_name,js.step_id as job_step,jh.message as error_message
    FROM msdb.dbo.sysjobs AS j
    INNER JOIN msdb.dbo.sysjobsteps AS js ON js.job_id = j.job_id
    INNER JOIN msdb.dbo.sysjobhistory AS jh ON jh.job_id = j.job_id AND jh.step_id = js.step_id
    WHERE jh.run_status = 0 AND MSDB.dbo.agent_datetime(jh.run_date,jh.run_time) >= GETDATE()-1
    ORDER BY MSDB.dbo.agent_datetime(jh.run_date,jh.run_time) DESC
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.