显示失败的 sql 作业的查询是什么

Avi*_*Avi 20 sql-server sql-server-agent jobs

什么是显示失败的sql作业的查询,以便我可以通过一个查询获得所有失败的作业信息

小智 15

我认为您不会真正通过一次查询获得“所有”作业信息,因为可以将作业配置为转到输出文件。输出文件有时可以获得比报告或写入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
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


KAS*_*DBA 10

您可以通过 sql server 中可用的标准报告获取此信息:

右键单击 SQL 服务器代理 > 标准报告并选择所需的报告,例如作业执行“失败的或花费大量时间的”..根据您的需要选择报告:

或者,

您可以使用以下脚本查找过去 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;
Run Code Online (Sandbox Code Playgroud)

如果您需要将信息作为报告,请使用此链接中的代码