2012-05-14 51 views

回答

11

我创建了一个视图获取失败的作业在SQL Server

CREATE VIEW dbo.View_Failed_Jobs 
    AS 
    SELECT Job.instance_id 
     ,SysJobs.job_id 
     ,SysJobs.name as 'JOB_NAME' 
     ,SysJobSteps.step_name as 'STEP_NAME' 
     ,Job.run_status 
     ,Job.sql_message_id 
     ,Job.sql_severity 
     ,Job.message 
     ,Job.exec_date 
     ,Job.run_duration 
     ,Job.server 
     ,SysJobSteps.output_file_name 
    FROM (SELECT Instance.instance_id 
     ,DBSysJobHistory.job_id 
     ,DBSysJobHistory.step_id 
     ,DBSysJobHistory.sql_message_id 
     ,DBSysJobHistory.sql_severity 
     ,DBSysJobHistory.message 
     ,(CASE DBSysJobHistory.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 run_status 
     ,((SUBSTRING(CAST(DBSysJobHistory.run_date AS VARCHAR(8)), 5, 2) + '/' 
     + SUBSTRING(CAST(DBSysJobHistory.run_date AS VARCHAR(8)), 7, 2) + '/' 
     + SUBSTRING(CAST(DBSysJobHistory.run_date AS VARCHAR(8)), 1, 4) + ' ' 
     + SUBSTRING((REPLICATE('0',6-LEN(CAST(DBSysJobHistory.run_time AS varchar))) 
     + CAST(DBSysJobHistory.run_time AS VARCHAR)), 1, 2) + ':' 
     + SUBSTRING((REPLICATE('0',6-LEN(CAST(DBSysJobHistory.run_time AS VARCHAR))) 
     + CAST(DBSysJobHistory.run_time AS VARCHAR)), 3, 2) + ':' 
     + SUBSTRING((REPLICATE('0',6-LEN(CAST(DBSysJobHistory.run_time as varchar))) 
     + CAST(DBSysJobHistory.run_time AS VARCHAR)), 5, 2))) AS 'exec_date' 
     ,DBSysJobHistory.run_duration 
     ,DBSysJobHistory.retries_attempted 
     ,DBSysJobHistory.server 
     FROM msdb.dbo.sysjobhistory DBSysJobHistory 
     JOIN (SELECT DBSysJobHistory.job_id 
      ,DBSysJobHistory.step_id 
      ,MAX(DBSysJobHistory.instance_id) as instance_id 
      FROM msdb.dbo.sysjobhistory DBSysJobHistory 
      GROUP BY DBSysJobHistory.job_id 
      ,DBSysJobHistory.step_id 
      ) AS Instance ON DBSysJobHistory.instance_id = Instance.instance_id 
     WHERE DBSysJobHistory.run_status <> 1 
     ) AS Job 
    JOIN msdb.dbo.sysjobs SysJobs 
     ON (Job.job_id = SysJobs.job_id) 
    JOIN msdb.dbo.sysjobsteps SysJobSteps 
     ON (Job.job_id = SysJobSteps.job_id AND Job.step_id = SysJobSteps.step_id) 
    GO 

- 现在执行SELECT语句来查询失败的作业

Select * from View_Failed_Jobs 
+0

应该指出,该脚本只列出了上次执行失败的作业,并且只列出了最后一次失败。如果它随后成功,则该脚本根本不显示它。这可能是也可能不是你想要的。 – paulH

7

这里是SQL Server 2008中的例子:
SQL Server Agent Job Query Samples

你会发现很多更多的如果你谷歌的“SQL服务器失败的工作”,但不幸的是大多数的例子并不说他们是否适用于SQL Server 2008,例如this one


编辑:

提示:当您从第一个链接复制代码,使用“查看源文件”按钮: view source

有一个“复制到剪贴板”按钮那么我首先尝试了一下,但是它在SQL Server中抱怨的SQL代码中生成了一些HTML标记(并且不让我执行查询)。

+2

链接腐烂。以下是[SQL Server代理作业查询示例]的更新链接(http://www.toadworld.com/platforms/sql-server/w/wiki/10351.sql-server-agent-job-query-samples.aspx) 。 – superEb

+0

内容也腐烂了。某些查询无法按预期工作。 – wp78de

0

您可以使用SQL试剂 - 使用快捷 - >工作活动监视器。 enter image description here

相关问题