2013-02-11 2 views
6

Я пытаюсь написать SQL-запрос, который скажет мне, запущено ли задание SQL или нет на основе его расписания. Например, если задание планировалось запустить в 12:00, а нам 12:05 вечера, и он все еще не работает, я хочу это знать. Какой был бы лучший способ обнаружить это?Обнаружение заданий, которые не выполняются по расписанию

Раньше у нас были задания SQL, которые периодически выполнялись, и SQL Server не запускал их. Чтобы этого избежать, мы хотели бы запустить запрос с SQL Server 2008 R2 и проверить, запущено ли задание или нет, а затем запустить предупреждение, если оно не было выполнено.

Спасибо за помощь!

ответ

1

Вы можете попробовать недокументированных процедуру

sys.xp_sqlagent_enum_jobs 

Эта процедура возвращает работу дата и время последнего запуска.

1

В этом запросе будут указаны детали работы.

Select hist.run_date,hist.run_status,hist.run_time 
from msdb..sysjobs jb 
inner join msdb..sysjobhistory hist 
on jb.job_id = hist.job_id 
where jb.name = 'MyJob' 

По Sql Books Online http://msdn.microsoft.com/en-us/library/ms174997.aspx

run_status

Статус выполнения задания:

0 = Failed

1 = Преемник

2 = Retry

3 = Отменено

+1

Я действительно хочу знать, пропустил ли Агент задание расписания. Этот запрос скажет мне, выполнено ли задание или нет. – Martin

0

Чтобы узнать лучше, какие задания не имеют. Попробуйте запустить этот запрос.

select name from msdb.dbo.sysjobs where job_id not in (select job_id from sdb.dbo.sysjobhistory) and enabled = 1 

по умолчанию каждая работа должна иметь историю, когда она выполняется.

Смежные вопросы