Как сделать разные пакеты SSIS последовательными, чтобы избежать блокировки?

У меня есть два разных пакета SSIS (ABC, XYZ), работающих на одном сервере. Я хочу, чтобы пакет XYZ запускался только в том случае, если пакет ABC не запущен. Также я хочу, чтобы XYZ дождался завершения выполнения ABC и начал выполнение после завершения ABC.

ABC запускается каждые 20 минут (обычно заканчивается через 20 минут, но иногда занимает больше времени), а XYZ запускается один раз в день.

Я могу выполнить вышеуказанную задачу, используя задачу сценария (GetRunningPackages()) в начале на XYZ.

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


person AJ01    schedule 17.11.2015    source источник


Ответы (2)


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

У нас были хорошие результаты с этим, и он довольно легко масштабируется для поддержки нескольких наборов пакетов.

person Eric Hauenstein    schedule 17.11.2015
comment
Спасибо, Эрик, это звучит интересно и осуществимо. Но меня беспокоит то, что ABC запускается каждые 20 минут, поэтому записи в журнале будут раздувать файл журнала. Мое беспокойство имеет для вас смысл? - person AJ01; 17.11.2015
comment
Да, но я не думаю, что это существенный фактор. Месяц обработки приведет к созданию чуть более 2 тыс. записей в журнале, что является тривиальной задачей для базы данных. Если вы хотите, настройте пакет XYZ на удаление всех записей журнала старше 7 дней, если он запускается каждые 24 часа. - person Eric Hauenstein; 17.11.2015

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

person ipavlu    schedule 26.11.2015