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