2012-05-14 2 views

ответ

11

Я создал представление, чтобы получить неудачную работу в SQL сервере

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 * from View_Failed_Jobs 
+0

Следует отметить, что в этом сценарии перечислены только те задания, которые не выполнялись в последний раз, когда он выполнялся, и перечисляет только последний сбой. Если впоследствии это удалось, то этот сценарий вообще не показан. Что может быть или не быть тем, что вы хотите. – paulH

7

Вот пример для SQL Server 2008:
SQL Server Agent Job Query Samples

Вы найдете много больше, если вы используете Google для «неудачных заданий SQL Server», но, к сожалению, большинство примеров не говорят, работают ли они для SQL Server 2008, например this one.


EDIT:

Подсказка: при копировании кода из первой ссылки, используйте кнопку "для просмотра исходного кода": view source

Там есть "скопировать в буфер обмена" кнопку в хорошо, что я пробовал в первую очередь, но он сгенерировал некоторые теги HTML в SQL-коде, который SQL Server жаловался (и не дал мне выполнить запрос).

+2

Ссылка гнить. Вот обновленная ссылка для [SQL Query Samples Samples] (http://www.toadworld.com/platforms/sql-server/w/wiki/10351.sql-server-agent-job-query-samples.aspx) , – superEb

+0

Содержимое гниет, тоже. Некоторые из запросов не работают должным образом. – wp78de

0

вы можете использовать ярлык с помощью SQL agent- -> мониторинг активности. enter image description here