Наследих много набори от SSIS пакети, които следват тази структура:
Във всяка група един главен пакет се изпълнява от задание на SQL Server. Главният пакет (с изключение на някои минимални операции за регистриране) не съдържа нищо друго освен десетки задачи ExecutePackage. Те извикват дъщерни пакети с ExecuteOutOfProcess False.
Задачите на ExecutePackage понякога са подредени последователно (свързани с ограниченията OnCompletion), но понякога в тежък паралелизъм: например един контейнер на последователност, съдържащ 40 задачи на ExecPackage, без ограничения, контролиращи техния ред на изпълнение.
Това прави отстраняването на грешки много трудно. SSISDB.catalog.operation_messages е мой приятел тук. Но изглежда, че само главният пакет записва ред в catalog.executions и всички съобщения от всички дъщерни пакети в крайна сметка се смесват под този единствен operation_id, който принадлежи на главния пакет. Понякога името на компонента в съобщението ми дава представа: но предишните разработчици често не променяха имената на компонентите при клониране на пакети, така че дори това е подвеждащо.
Би било страхотно, ако всеки дъщерен пакет може да напише свой собствен ред catalog.executions и тогава всички негови съобщения ще бъдат под този идентификатор на операция (execution_id в таблицата catalog.executions). Има ли някакъв начин това да стане? Ще направи ли ExecuteOutOfProcess=True това и има ли някакви недостатъци?