Добрый день, подскажите пожалуйста, больше спрашивать не у кого...
Есть ETL пакет, который трансформирует и актуализирует данные ХД из промежуточной области (StageDB). Таблицы промежуточной области заполняет дочерний пакет, по факту родительский пакет параллельно запускает N'ое количество дочерних пакетов (количество указывается в параметрах родителя), при этом все шаги получения данных дочернего объекта обернуты в цикл, на тот случай если параметр количества параллельной обработки имеет меньшее значение чем количество источников данных. Все пакеты имеют обработчик событий OnError, который пишет (обычный insert с параметрами) в таблицу логирования.
Вопрос:
В Visual Studio все работает отлично, если у одного из экземпляров дочернего пакета в каком-то источнике данных возникает исключение (сервер недоступен, БД в монопольном режиме…) то обработчик событий фиксирует ошибку и переходит в цикле к следующему источнику. Все прям так, как и хотел. Но развернутый пакет в службу Integration Services ведет себя совсем по-другому, в случае выявленного исключения дочернего пакета фиксирует ошибку в таблицу логирования и просто заворачивает родительский пакет. Причину пока не удается выявить, отчеты SSIS нечего внятного не показывают, обработчик событий не фиксирует исключения в таблицу именно такой ситуации.
Вызов дочернего пакета в родителе осуществляет компонент Script, есть одна особенность, развернутый родительский пакет в службе Integ.Services так же обращается к локальному файлу дочернего пакета, но я сомневаюсь что тут причина.
В обоих случаях, что в Visual Studio, что на сервере родительский пакет после выявленного исключения дочернего(их) пакета(ов), благополучно переходит к следующему этапу на котором в цикле повторно пытается извлечь данные из источника с определенным количеством попыток и временем ожидания между итерациями цикла. Повторюсь: Если повторная загрузка данных пакета, развернутого на сервере, терпит не удачу (исключение), то родительский пакет прерывает свое выполнение, без фиксации исключения.
Есть ETL пакет, который трансформирует и актуализирует данные ХД из промежуточной области (StageDB). Таблицы промежуточной области заполняет дочерний пакет, по факту родительский пакет параллельно запускает N'ое количество дочерних пакетов (количество указывается в параметрах родителя), при этом все шаги получения данных дочернего объекта обернуты в цикл, на тот случай если параметр количества параллельной обработки имеет меньшее значение чем количество источников данных. Все пакеты имеют обработчик событий OnError, который пишет (обычный insert с параметрами) в таблицу логирования.
Вопрос:
В Visual Studio все работает отлично, если у одного из экземпляров дочернего пакета в каком-то источнике данных возникает исключение (сервер недоступен, БД в монопольном режиме…) то обработчик событий фиксирует ошибку и переходит в цикле к следующему источнику. Все прям так, как и хотел. Но развернутый пакет в службу Integration Services ведет себя совсем по-другому, в случае выявленного исключения дочернего пакета фиксирует ошибку в таблицу логирования и просто заворачивает родительский пакет. Причину пока не удается выявить, отчеты SSIS нечего внятного не показывают, обработчик событий не фиксирует исключения в таблицу именно такой ситуации.
Вызов дочернего пакета в родителе осуществляет компонент Script, есть одна особенность, развернутый родительский пакет в службе Integ.Services так же обращается к локальному файлу дочернего пакета, но я сомневаюсь что тут причина.
+ |
В обоих случаях, что в Visual Studio, что на сервере родительский пакет после выявленного исключения дочернего(их) пакета(ов), благополучно переходит к следующему этапу на котором в цикле повторно пытается извлечь данные из источника с определенным количеством попыток и временем ожидания между итерациями цикла. Повторюсь: Если повторная загрузка данных пакета, развернутого на сервере, терпит не удачу (исключение), то родительский пакет прерывает свое выполнение, без фиксации исключения.