Запуск нескольких экземпляров пакета SSIS через SQLAgent одновременно

У меня есть пакет SSIS, запланированный для запуска каждые X минут в SQLAgent, который впоследствии выполняет множество дочерних пакетов, если выполняются определенные условия. Проблема, с которой я сталкиваюсь, заключается в том, что иногда запуск некоторых дочерних пакетов занимает намного больше времени, чем X минут, что, в свою очередь, означает, что ничто другое не может работать, пока все дочерние пакеты не будут завершены.

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

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

Запуск ParentA запланирован каждые 10 минут, запуск начинается в 10:00, и критерии ChildA соблюдены. ChildB должен запуститься в 10:20, его не соблюдают, поэтому он не запускается. ChildA занимает 3 часа.

Мне нужно, чтобы новый экземпляр ParentA стартовал в 10:10, а затем снова в 10:20.

Как я могу сделать это без запланированного 2+ ParentA и необходимости делать какое-то причудливое кодирование, чтобы несколько экземпляров дочерних пакетов не запускались?

Спасибо


person user1238918    schedule 05.03.2014    source источник


Ответы (1)


Я бы изменил пакет ParentA так, чтобы он запускался один раз и не заканчивался, но имел серию циклов, запускающих дочерние пакеты.

В PackageA я бы добавил контейнер цикла For, в который я бы добавил задачу «Выполнение SQL», которая использует команду SQL WAITFOR для паузы на 10 минут. Затем я запустил пакет ChildA.

Я бы повторил этот шаблон для ChildB и т. д. Поскольку каждый контейнер цикла For Loop Container независим, они будут выполнять независимый цикл. Каждый отдельный контейнер цикла будет ждать завершения своего дочернего пакета перед циклом.

Вам нужно добавить какой-то механизм, чтобы остановить зацикливание, например. проверить системное время, подсчитать количество циклов и т.п. Этот тест будет проходить в каждом свойстве EvalExpression цикла For.

person Mike Honey    schedule 06.03.2014
comment
Не вызовет ли это проблем, если один из дочерних пакетов выйдет из строя? Не произойдет ли сбой всего цикла, и тогда придется перезапускать родительский пакет? - person user1238918; 10.03.2014
comment
Это кажется отдельным соображением от вашего исходного вопроса, но в любом случае вы можете настроить пакет SSIS для продолжения в случае возникновения ошибок. Вы также можете настроить задание, которое запускает пакет ParentA, для запуска по повторяющемуся расписанию, например. каждые 10 минут. Это не будет иметь никакого эффекта, пока ParentA не завершится по какой-либо причине. - person Mike Honey; 11.03.2014