Truy vấn để hiển thị các công việc sql thất bại là gì


Câu trả lời:


12

Tôi không nghĩ rằng bạn thực sự sẽ nhận được "tất cả" thông tin công việc với một truy vấn vì các công việc có thể được cấu hình để chuyển đến các tệp đầu ra. Các tệp đầu ra đôi khi có thể nhận được nhiều thông tin hơn được báo cáo hoặc ghi vào msdbbảng.

Tuy nhiên, chế độ xem được tìm thấy bằng cách xem lịch sử công việc qua SSMS có thể được kéo bằng truy vấn này để chỉ trả về các công việc không thành công (ví dụ: nếu một công việc có 2 bước và lần thứ hai thất bại thì truy vấn này sẽ trả về cả hai bước):

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

nhập mô tả hình ảnh ở đây


6

Bạn có thể nhận thông tin này bằng các báo cáo tiêu chuẩn có sẵn trong máy chủ sql:

Nhấp chuột phải vào tác nhân máy chủ SQL> Báo cáo chuẩn và chọn báo cáo mong muốn như thực thi công việc "thất bại hoặc mất nhiều thời gian" .. Chọn báo cáo theo yêu cầu của bạn:

Hoặc là,

Bạn có thể sử dụng tập lệnh bên dưới để tìm việc thất bại trong 24 giờ qua:

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

Và nếu bạn cần thông tin như một báo cáo, hãy sử dụng mã trong liên kết này


Cảm ơn bạn cho tiền boa, đây chính xác là những gì tôi đang tìm kiếm. Tôi nghĩ rằng chúng ta có thể đơn giản hóa các biến một chút để có kết quả tương tự: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

Tôi đã sửa đổi mã của Shawn Melton một chút để nhận tất cả các lỗi công việc trong 24 giờ qua. Có một tuyên bố bị thiếu trong tham gia, tôi cũng đã sửa nó. Cảm ơn nhiều Shawn, công cụ tuyệt vời!


/*  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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.