Я унаследовал множество наборов пакетов SSIS, которые имеют следующую структуру:
В каждой группе один основной пакет выполняется заданием SQL Server. Главный пакет (за исключением некоторых минимальных операций ведения журнала) не содержит ничего, кроме десятков задач ExecutePackage. Они вызывают дочерние пакеты с ExecuteOutOfProcess False.
Задачи ExecutePackage иногда располагаются последовательно (связанные с ограничениями OnCompletion), но иногда и с сильным параллелизмом: например, один контейнер последовательности, содержащий 40 задач ExecPackage, без ограничений, управляющих порядком их выполнения.
Это делает отладку проблем очень сложной. SSISDB.catalog.operation_messages — мой друг. Но кажется, что только главный пакет записывает строку в catalog.executions, и все сообщения от всех дочерних пакетов в конечном итоге смешиваются под тем единственным идентификатором операции, который принадлежит главному пакету. Иногда имя компонента в сообщении дает мне подсказку: но предыдущие разработчики часто не меняли имена компонентов при клонировании пакетов, так что даже это вводит в заблуждение.
Было бы здорово, если бы каждый дочерний пакет мог написать свою собственную строку catalog.executions, и тогда все его сообщения были бы под этим идентификатором операции (идентификатор_исполнения в таблице catalog.executions). Есть ли способ сделать это? Будет ли ExecuteOutOfProcess=True делать это, и есть ли у него недостатки?