Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как узнать состояние задания без использования процедуры "sp_help_job" в MSSQL 2000  [new]
Black-code
Member

Откуда: Арзамас
Сообщений: 5
Добрый день!

Делаю небольшую автоматизацию, в которой необходимо проверить состояние запущенной задачи.
Штатными средствами это делается так:
EXEC msdb.dbo.sp_help_job @job_id = '...'


На выходе это процедуры, в одном из наборов данных встречается поле current_execution_status, которое содержит текущее состояние задачи. Есть ли возможность получить эти данные, не прибегая к вызову процедуры, т.е. сделать обращение к какой-либо системной таблице и считать его?
Перелопатил следующие таблицы:
msdb.dbo.sysjobservers
msdb.dbo.sysjobsteps
msdb.dbo.sysjobs
msdb.dbo.sysjobhistory

Данных в них не нашёл (возможно плохо смотрел).
Прошу помощи в этом вопросе в рамках MSSQL 2000.
22 окт 15, 14:35    [18312084]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать состояние задания без использования процедуры "sp_help_job" в MSSQL 2000  [new]
Glory
Member

Откуда:
Сообщений: 104751
Black-code
Перелопатил следующие таблицы:

перелопатьте текст sp_help_job
22 окт 15, 14:37    [18312104]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать состояние задания без использования процедуры "sp_help_job" в MSSQL 2000  [new]
Black-code
Member

Откуда: Арзамас
Сообщений: 5
Glory
Black-code
Перелопатил следующие таблицы:

перелопатьте текст sp_help_job


В недрах процедур, которые вызываются дальше, находится следующий вызов:
EXECUTE master.dbo.xp_sqlagent_enum_jobs @is_sysadmin, @job_owner


Данная процедура является системной и залезть в неё нельзя. Но именно она выдаёт требуемое поле "State". Есть ещё мысли?
22 окт 15, 14:54    [18312214]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать состояние задания без использования процедуры "sp_help_job" в MSSQL 2000  [new]
Glory
Member

Откуда:
Сообщений: 104751
Black-code
Есть ещё мысли?

А нужны еще мысли ?
22 окт 15, 14:55    [18312223]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать состояние задания без использования процедуры "sp_help_job" в MSSQL 2000  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8570
проверить состояние запущенной задачи

Что же мешает на каждом шаге писать сообщения о выполнении в свою таблицу?
22 окт 15, 15:02    [18312270]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать состояние задания без использования процедуры "sp_help_job" в MSSQL 2000  [new]
Black-code
Member

Откуда: Арзамас
Сообщений: 5
Владислав Колосов
проверить состояние запущенной задачи

Что же мешает на каждом шаге писать сообщения о выполнении в свою таблицу?

Вот для этого мне и нужно знать её состояние: выполняется, выполнена с ошибкой, выполнена успешно.

Пока думаю всё-таки над временной таблицей и процедурой master.dbo.xp_sqlagent_enum_jobs.
22 окт 15, 15:05    [18312288]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать состояние задания без использования процедуры "sp_help_job" в MSSQL 2000  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2407
Black-code
Есть ли возможность получить эти данные, не прибегая к вызову процедуры,.

создаете временную таблицу, записываете в нее результат вызова процедуры, пользуетесь
22 окт 15, 15:09    [18312323]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать состояние задания без использования процедуры "sp_help_job" в MSSQL 2000  [new]
Glory
Member

Откуда:
Сообщений: 104751
Один из немногочисленных случаев, когда запрос к самому себе имеет пользу

SELECT     [Job ID], [Last Run Date], [Last Run Time], [Next Run Date], [Next Run Time], [Next Run Schedule ID], [Requested To Run], [Request Source], [Request Source ID], 
                      Running, [Current Step], [Current Retry Attempt], State
FROM         OPENQUERY(loopback, 'SET FMTONLY OFF EXECUTE master.dbo.xp_sqlagent_enum_jobs @is_sysadmin=1, @job_owner=''dbo''') AS a
22 окт 15, 15:11    [18312348]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать состояние задания без использования процедуры "sp_help_job" в MSSQL 2000  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8570
insert logtable ('start', datetime())
exec proc
insert logtable ('stop', datetime())

что здесь сложного? Для ошибки сделайте шаг задания, который запишет

insert logtable ('error', datetime())
22 окт 15, 15:13    [18312363]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать состояние задания без использования процедуры "sp_help_job" в MSSQL 2000  [new]
Black-code
Member

Откуда: Арзамас
Сообщений: 5
Владислав Колосов
insert logtable ('start', datetime())
exec proc
insert logtable ('stop', datetime())

что здесь сложного? Для ошибки сделайте шаг задания, который запишет

insert logtable ('error', datetime())


Пишу что-то типа планировщика, работающий при помощи задач.
Есть основная задача, которая с какой-то периодичностью мониторит таблицу. В таблице записано что и когда нужно запустить, состояния и прочее. Есть дополнительные таблицы, описывающие алгоритм работы задания (как правило, шаг - это какой-либо запрос). Если что-то нужно запустить, то основная задача создаёт новую задачу, закидывает в неё текст запроса/вызова, который описан в дополнительной таблице и запускает новую задачу на выполнение.
И периодически мониторит состояние этой (или нескольких) "дочерней" задачи. Если выполнение успешно, то текст меняется на следующий (берётся всё из тех же доп. таблиц) в этой задаче и она вновь запускается. Далее опять мониторинг и т.д.
Хотел сам опрос сделать попроще, но Ваш вариант приму в рассмотрение.
22 окт 15, 15:30    [18312534]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить