Почему файл .dtsx дочернего пакета служб SSIS открывается в BIDS при запуске родительского пакета в режиме отладки? - PullRequest
2 голосов
/ 14 июня 2019

SSIS 2008 R2 + BIDS

Я переписываю задание ETL.Задание состоит из примерно 50 шагов, некоторые из которых являются пакетами служб SSIS, а некоторые - просто сохраненными вызовами процедур.Я пишу процедуру-оболочку (Gatekeeper), которая проверяет, какие из этих «шагов» готовы к выполнению, а затем выполняет соответствующий пакет .dtsx или сохраненный процесс.

При запуске Gatekeeper вызывает сохраненный процесс, чтобы получить список «шагов» для текущего запуска.Затем он проходит через Foreach Loop, проверяет, является ли «шаг» пакетом или процедурой, на основе столбца флага, а затем динамически запускает соответствующий тип задачи для шага.После завершения этого шага я регистрирую либо успех, либо неудачу и повторяю цикл Foreach.

До сих пор я получил бизнес-логику и динамическое выполнение пакетов и хранимых процедур, работающих правильно.Для хранимых вызовов proc я строю запрос в строковой переменной и использую Execute SQL Task с SqlStatementSourceType, установленным на Variable.Для пакетов я использую Execute Package Task, который использует File Connection Manager, который использует выражение для установки ConnectionString на путь к файлу .dtsx в файловой системе.

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

Так в чем проблема?Я заметил, что когда гейткиперу необходимо выполнить 2 или более пакетов подряд, когда он достигает значения Execute Package Task каждый раз подряд, BIDS пытается открыть ранее завершенный дочерний пакет.Все пакеты, которые мы используем, зашифрованы паролем (одинаковым для всех файлов), и я получаю запрос «Пароль пакета», когда BIDS пытается открыть файл.

Что странно, если порядок Package -> proc -> package Странное поведение при открытии файла не происходит.Я пытался изменить различные значения DelayValidation в дочерних пакетах и ​​в гейткипере, я пытался работать внутри и снаружи родительского процесса, но, похоже, они не имеют никакого отношения к проблеме.

Вот скриншот привратника Control Flow: enter image description here

Вот конфигурация File Connection Manager: enter image description here

А вот конфигурация Execute Package Task: enter image description here

РЕДАКТИРОВАТЬ:

На догадку я попытался превентивно открыть два дочерних пакета в BIDS перед запускомтестовое выполнение гейткипера.Я наблюдал, как BIDS подключился к первому дочернему пакету и прошел через его задачи в режиме отладки.«Круто, может быть, он просто пытался открыть файл, чтобы запустить его в режиме отладки», - подумал я.Нету.Как только он попал во второй дочерний пакет, BIDS попытался открыть еще одну копию первого дочернего пакета.

РЕДАКТИРОВАТЬ 2:

Сразу после публикации предыдущего редактирования я понял, что у меня может не бытьу меня уже были открыты те же самые файлы, которые пытался запустить гейткипер.У меня были открытые исходные файлы из моей локальной папки TFS вместо пакетов, фактически развернутых в файловой системе.Поэтому я закрыл исходные файлы для дочерних элементов и оставил первый развернутый дочерний файл открытым и повторно запустил Gatekeeper.Он все еще подключался к открытому дочернему файлу на первой итерации, и, к моему удивлению, он не пытался открыть еще одну копию дочернего файла # 1, когда он попадал на вторую итерацию.

Так что теперь я думаю, что этокакая-то странная проблема отладки в BIDSСледующим моим тестом будет развертывание Gatekeeper на тестовом сервере и выяснение, не возникнут ли у меня проблемы при выполнении его с помощью задания агента SQL.

...