Sql-Server

顯示失敗的 sql 作業的查詢是什麼

  • April 27, 2021

顯示失敗的sql作業的查詢是什麼,以便我可以通過一個查詢獲得所有失敗的作業資訊

我認為您不會真正通過一次查詢獲得“所有”作業資訊,因為可以將作業配置為轉到輸出文件。輸出文件有時可以獲得比報告或寫入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

在此處輸入圖像描述

您可以通過 sql server 中可用的標準報告獲取此資訊:

右鍵點擊 SQL Server 代理 > 標準報告,然後選擇所需的報告,例如作業執行“失敗的或花費大量時間的”。根據需要選擇報告:

要麼,

您可以使用以下腳本查找過去 24 小時內失敗的作業:

-- Variable Declarations 
DECLARE @FinalDate INT;
SET @FinalDate = CONVERT(int
   , CONVERT(varchar(10), DATEADD(DAY, -1, GETDATE()), 112)
   ) -- Yesterday's date as Integer in YYYYMMDD format

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

如果您需要將資訊作為報告,請使用此連結中的程式碼

引用自:https://dba.stackexchange.com/questions/88810