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

Есть идея сделать табличку, в которую вручную будут записываться периоды для дополнительной перезаливки. Например, сейчас автоматически перезаливаются последние 10 дней. Но нужно иногда перезаливать еще какие-то накладные за прошлый год, например.

И вот хочется сделать так:
сначала в джобе перезаливаются эти "дежурные" последние 10 дней. Потом доходим до шага с этой табличкой: проверяется, есть ли в ней записи. Если есть, то запускаем джоб снова с новыми параметрами (даты перезаливки берутся из пользовательской функции).
А если нет, то идем дальше на обновление партиций.

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

А вот как реализовать повторный запуск первого джоба в случае, когда в нашей табличке есть записи с "периодами перезаливки"?
Если я прям из этого шага запущу джоб, то вылезет ошибка, что джоб УЖЕ запущен и его нельзя запустить повторно.
Как быть?
18 мар 13, 12:46    [14061954]     Ответить | Цитировать Сообщить модератору
 Re: хитрое выполнение джоба  [new]
nizamovich
Member

Откуда: Москва
Сообщений: 116
нуб987,

джоб или шаг джоба ?
запускается процедура , или просто код в шаге?

что мешает загнать код в процедуру , куда передаются параметры - даты ?
18 мар 13, 12:53    [14061993]     Ответить | Цитировать Сообщить модератору
 Re: хитрое выполнение джоба  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
Проще всего создать такой же джоб.
18 мар 13, 12:56    [14062006]     Ответить | Цитировать Сообщить модератору
 Re: хитрое выполнение джоба  [new]
нуб987
Guest
nizamovich
джоб или шаг джоба ?

если вопрос об этом:
нуб987
И вот хочется сделать так:
сначала в джобе перезаливаются эти "дежурные" последние 10 дней. Потом доходим до шага с этой табличкой: проверяется, есть ли в ней записи. Если есть, то запускаем джоб снова с новыми параметрами (даты перезаливки берутся из пользовательской функции).
А если нет, то идем дальше на обновление партиций.

то там именно так, как написано. Ошибок нет.

Распишу немного подробней:
есть джоб с кучей шагов. Первые штук 15-20 шагов - это перезаливка накладных (вызываются процедуры заливки данных, пересчет различных сумм и т.п.). Даты для перезаливки данных берутся из пользовательской функции.
Т.е. каждый шаг выполняется примерно с таким кодом:
declare
   @StartDate datetime,
   @EndDate datetime

set @StartDate = GetPeriod('Start')
set @EndDate = GetPeriod('End')

exec SomeFunc @date1 = @StartDate, @date2 = @EndDate, ...


Дальше идут несколько шагов по обновлению партиций кубов: в этих шагах запускаются пакеты DTS, обновляющие партиции.

Первую часть джоба можно было бы заменить одной большой процедурой вида:
declare
   @StartDate datetime,
   @EndDate datetime

set @StartDate = GetPeriod('Start')
set @EndDate = GetPeriod('End')

exec SomeFunc @date1 = @StartDate, @date2 = @EndDate, ...
exec SomeFunc2 @date1 = @StartDate, @date2 = @EndDate, ...
exec SomeFunc3 @date1 = @StartDate, @date2 = @EndDate, ...
exec SomeFunc4 @date1 = @StartDate, @date2 = @EndDate, ...

и так вщм-то было раньше. Но со временем пришли к выводу, что держать большой джоб (вместо процедуры) проще в плане изменений, отладки и т.п.

Так вот. Джоб этот запускается каждое утро и перезаливает последние 10 дней накладных в т.фактов (плюс куча всяких пересчетов и т.п.)
Сейчас есть идея создать некую табличку, в которую можно было бы руками заносить произвольные периоды для перезаливки.
И тогда в этом джобе можно было перед обновлением партиций кубов добавить еще один шаг, который бы удалял уже обработанные периоды из этой таблички и запускал бы джоб заново, если там (в этой табличке) еще остались записи.
Каким образом лучше организовать такой перезапуск?

В свойствах каждого шага джоба есть возможность GoTo в случае успешности или неуспешности выполнения данного шага. Но генерить искуственную ошибку для нужного перехода считаю неправильным.
18 мар 13, 14:08    [14062517]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить