Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выполнение нескольких шагов задания в цикле  [new]
Conejo
Member

Откуда:
Сообщений: 125
Есть такое задание, которое выполняется каждую ночь и обрабатывает большое кол-во данных. Т.е. все что нужно оно гарантированно не обрабатывает, но очень хочется, чтобы обрабатывалось как можно больше.
В связи с этим хотелось бы, чтобы шаги 4-6 выполнялись несколько раз. В идеале что-то типа ветвления: если на момент завершения шага 6 уже есть 6 утра, то переход к шагу 7, нет - к шагу 4. Можно ли это реализовать, не меняя задействованные процедуры?

К сообщению приложен файл. Размер - 29Kb
25 фев 16, 00:08    [18860042]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких шагов задания в цикле  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
Можно в 6-м шаге добавить код, который в случае, если нет 6 утра, генерирует ошибку.
А в свойствах шага при аварийном завершении указать переход на шаг 4.
Или наоборот.
Только существует вероятность зацикливания при возниконовении реальной ошибки.
25 фев 16, 09:40    [18860598]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких шагов задания в цикле  [new]
Conejo
Member

Откуда:
Сообщений: 125
Про это думала. Но в случае реальной ошибки нужно останавливать задание, ну уж по крайней мере ни в коем случае не должен выполниться шаг "включение операторов".
Есть другой путь?
25 фев 16, 09:49    [18860628]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких шагов задания в цикле  [new]
Conejo
Member

Откуда:
Сообщений: 125
Отслеживать время на каждом шаге - тоже не вариант. Если 6 часов еще нет, то точно была ошибка. Но вот если 6:10 - уже кто знает, завершился 6й шаг нормально или упал...
А есть механизм, позволяющий узнать, с каким результатом предыдущий шаг завершился?
25 фев 16, 09:53    [18860648]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких шагов задания в цикле  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
Сделайте переход на 4-й шаг при успешном завершении 6-го.
А при наступлении 6 утра генерируйте ошибку.
Добавьте дополнительные шаги для случая реальной ошибкию
Вообще можно реализовать это всё в одном скрипте, используя TRY...CATCH, RAISERROR, THROW и т.д.
Путей много.
25 фев 16, 10:10    [18860721]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких шагов задания в цикле  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Conejo
А есть механизм, позволяющий узнать, с каким результатом предыдущий шаг завершился?

SELECT a.job_id, a.last_executed_step_id, jh.[message], jh.sql_message_id, jh.sql_severity, jh.run_date, jh.run_time
FROM msdb.dbo.sysjobactivity a
JOIN msdb.dbo.syssessions s ON s.session_id = a.session_id
JOIN (
	SELECT MAX(agent_start_date) AS max_agent_start_date
	FROM msdb.dbo.syssessions
) s2 ON s.agent_start_date = s2.max_agent_start_date
LEFT JOIN msdb.dbo.sysjobhistory jh ON a.job_id = jh.job_id AND a.session_id = s.session_id AND jh.step_id = a.last_executed_step_id
WHERE a.run_requested_date IS NOT NULL
	AND a.stop_execution_date IS NULL

Пример:

job_id                               last_executed_step_id message                                                                                                                                      
------------------------------------ --------------------- ---------------------------------------------------------------------------------------------------------------------------------------------
F9EE519F-6123-49B2-9973-5D752F28A06B 1                     Executed as user: NT SERVICE\SQLAgent$SQL_2012. Could not find stored procedure 'sdffgfdg'. [SQLSTATE 42000] (Error 2812).  The step failed. 
25 фев 16, 10:46    [18860895]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких шагов задания в цикле  [new]
Glory
Member

Откуда:
Сообщений: 104751
Conejo
Отслеживать время на каждом шаге - тоже не вариант. Если 6 часов еще нет, то точно была ошибка. Но вот если 6:10 - уже кто знает, завершился 6й шаг нормально или упал...
А есть механизм, позволяющий узнать, с каким результатом предыдущий шаг завершился?

Создайте 1 щаг вместо 3х
С циклом внутри
25 фев 16, 10:49    [18860913]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких шагов задания в цикле  [new]
Conejo
Member

Откуда:
Сообщений: 125
Glory
Создайте 1 щаг вместо 3х
С циклом внутри

это не желательно. Если на сервере большие тормоза, и например в 9 часов задание не завершилось, то 4 и 5 шаги можно прекращать в любой момент, в то время как выполнения 6-го лучше дождаться... Т.е. важно понимать, что именно из них выполняется в настоящий момент.
Jovanny
Добавьте дополнительные шаги для случая реальной ошибкию

Думаю, да, сделаю так, проще всего для понимания))
25 фев 16, 11:03    [18860979]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких шагов задания в цикле  [new]
Conejo
Member

Откуда:
Сообщений: 125
Conejo
Jovanny
Добавьте дополнительные шаги для случая реальной ошибкию

Думаю, да, сделаю так, проще всего для понимания))


И все равно... Вот завершился шаг с ошибкой, делаю переход на новый шаг, и... как узнать, реальная была ошибка или сгенерированная по Raise error?
25 фев 16, 11:08    [18861011]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких шагов задания в цикле  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Conejo
реальная была ошибка или сгенерированная по Raise error?

К примеру можете добавить пользовательское сообщение. Рейсить ошибку по нему и потом сравнивать полученный message_id в задании.

RAISERROR(49914, 16, 1)

SELECT message_id, [text]
FROM sys.messages
WHERE message_id > 13000

Msg 49914, Level 16, State 1, Line 1
Trace is null
25 фев 16, 11:15    [18861069]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких шагов задания в цикле  [new]
rootman
Member

Откуда:
Сообщений: 114
А добавить еще один шаг с плучением времени системы и дальше решать что делать? Вроде SYSDATETIME.
25 фев 16, 11:19    [18861092]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких шагов задания в цикле  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9155
Conejo,

объедините с 4 по 6 в один шаг и крутите в нём цикл столько, сколько требуется.
25 фев 16, 11:34    [18861207]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение нескольких шагов задания в цикле  [new]
Conejo
Member

Откуда:
Сообщений: 125
Понятно, всем спасибо
25 фев 16, 12:05    [18861457]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить