Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
alexeyvg Member Откуда: Moscow Сообщений: 31819 |
Есть SSIS - пакет. В нём в цикле (Foreach loop) выполняется несколько задач, и в частности, FTP task Необходимо в случае ошибки в этой FTP task продолжить выполнение цикла (точнее, циклов - их несколько вложенных). Как вообще это можно сделать? Пока что я нашёл только один выход - во всех контейнерах SSIS-пакета отключить остановку при возникновении ошибки (установив параметр MaximumErrorCount=0), но это, конечно, неправильно, потому что мне не надо отключать контроль ошибок вообще для всех тасков пакета. Все остальные методы не работают, например, установка ForceExecutionResult в Success... Есть какое то решение? |
1 фев 12, 12:29 [12010220] Ответить | Цитировать Сообщить модератору |
SergePnb Member Откуда: Киев Сообщений: 456 |
alexeyvg, А если перенаправить Error output в заглушку - скрипт таск например? Я такое делал для SQL task, там ошибка подавляется однозначно. К сообщению приложен файл. Размер - 8Kb |
1 фев 12, 12:36 [12010298] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31819 |
При этом ещё до выполнения заглушки в выводе студии (в режиме отладки) появляется сообщение: Warning: 0x80019002 at Foreach Loop Container: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED. The Execution method succeeded, but the number of errors raised (1) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors. |
||
1 фев 12, 12:53 [12010508] Ответить | Цитировать Сообщить модератору |
Критик Member Откуда: Москва / Калуга Сообщений: 34975 Блог |
Посмотрите свойства FailParentOnFailure FailPackageOnFailure MaxumumErrorCount FailTaskIfReturnCodeIsNotSuccessValue правда я реализовывал загрузку через сторонний ftp-клиент который вызывался в Foreach loop через командную строку. |
1 фев 12, 12:56 [12010555] Ответить | Цитировать Сообщить модератору |
Критик Member Откуда: Москва / Калуга Сообщений: 34975 Блог |
Вот этот использовал http://ftps.codeplex.com/ он кстати позволяет выкачать все по маске файла |
1 фев 12, 13:01 [12010614] Ответить | Цитировать Сообщить модератору |
HandKot Member Откуда: Sergiev Posad Сообщений: 3027 |
если не ошибаюсь, то надо просто на контейнере выставить MaxErrorCount = 0 FailParentOnFailure = false failPackageOnfailure = false и все |
1 фев 12, 13:15 [12010789] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31819 |
Видимо, мы тоже перейдём на что то такое, потому как в будущем вроде бы клиенту понадобится FTPS...
MaxumumErrorCount для таска ни на что не влияет, а для контейнера гасит ошибку. Но к сожалению, даже если в контейнере установить MaxumumErrorCount=0, то он то не прекратит работу, но первый же контейнер уровнем выше вывалится :-( FailTaskIfReturnCodeIsNotSuccessValue - это только для Process Task, как я понимаю, это не подходит... |
||||
1 фев 12, 13:16 [12010808] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31819 |
А для всех установить это свойство нельзя - это значит выключить вообще всю обработку ошибок. Вообще странно, такая куча средств по управлению ошибками, а управлять нельзя :-) |
||
1 фев 12, 13:18 [12010823] Ответить | Цитировать Сообщить модератору |
SergePnb Member Откуда: Киев Сообщений: 456 |
Точно, MaxErrorCount = 0 на контейнере помогает повторять тело и игнорировать ошибку; все остальное значения по умолчанию. |
||
1 фев 12, 13:19 [12010838] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31819 |
|
||||
1 фев 12, 13:42 [12011157] Ответить | Цитировать Сообщить модератору |
HandKot Member Откуда: Sergiev Posad Сообщений: 3027 |
есть если стоя на контейнере, в котором может произойти ошибка и ее не надо передавать дальше, то надо перейти на вкладку Event Handler, выбрать св-во OnError и в окне Variables найти с именем Propagate и выставить ей значение false MaxErrorCount должно быть в 0 |
1 фев 12, 15:26 [12012386] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31819 |
Поставил это свойство на интересущем меня таске, при этом свойства MaxErrorCount и прочие установил по умолчанию. Сразу всё стало работать, как и хотелось - ошибку таск генерит, я её обрабатываю, как мне надо, при этом выполнение продолжается. Спасибо! |
||
1 фев 12, 16:01 [12012747] Ответить | Цитировать Сообщить модератору |
HandKot Member Откуда: Sergiev Posad Сообщений: 3027 |
alexeyvg предалгаю Вам закинуть это решение в ФАК я бы и сам мог написать, но из меня писарчук еще тот :) |
1 фев 12, 16:10 [12012850] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31819 |
|
||
1 фев 12, 16:16 [12012932] Ответить | Цитировать Сообщить модератору |
HandKot Member Откуда: Sergiev Posad Сообщений: 3027 |
точно и меньше будет встерчаться
|
||
1 фев 12, 16:18 [12012970] Ответить | Цитировать Сообщить модератору |
HandKot Member Откуда: Sergiev Posad Сообщений: 3027 |
вот нашел, кому интересно, по этому поводу статью SSIS Event Handler Variables – Propagate |
2 фев 12, 08:49 [12016667] Ответить | Цитировать Сообщить модератору |
Между сообщениями интервал более 1 года. |
tashkafox Member Откуда: Москва Сообщений: 106 |
HandKot, А в свежей SSDT можно так сделать? Я остановилась на том, что System Variables не могу открыть... К сообщению приложен файл. Размер - 2Kb |
15 май 19, 17:58 [21885645] Ответить | Цитировать Сообщить модератору |
tashkafox Member Откуда: Москва Сообщений: 106 |
tashkafox, нашла. в Grid Options включается К сообщению приложен файл. Размер - 6Kb |
15 май 19, 18:17 [21885660] Ответить | Цитировать Сообщить модератору |
Karp13 Member Откуда: Сообщений: 14 |
Всем привет. И просто адски прошу помощи по этой же теме с ошибками. Речь пойдёт о warning'е: "Warning: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED. The Execution method succeeded, but the number of errors raised (1) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors." В проекте где-то в середине среди пакетов и подпакетов есть цикл "For Loop Container" (у него "Propagate" выключил, "MaximumErrorCount = 0" установил, тут всё ок) который первый раз вызывает подпакет и тот падает, а потом вызывает ещё раз и во второй раз уже подпакет отрабатывает успешно. И это повторяется для сразу 10-20 пакетов, т.е. каждый пакет вызывается несколько раз, если первый раз упал. Всё бы хорошо, но в итоге на самом верху получаю вышеупомянутый warning и падение, хотя по факту всё отработало успешно, пусть и не с первого раза. И весь проект вызывается в джобе, который тоже падает в итоге и спамит на почту сообщения об ошибках, хотя, повторюсь, всё хорошо, просто одна из попыток не удалась в процессе отработки. Как это победить? Возможно ли? Игнорировать в обще все ошибки не хочу. Хочу что бы просто игнорировались всем проектом только ошибки происходящие в "For Loop Container". Сообщение было отредактировано: 30 янв 20, 13:42 |
30 янв 20, 13:41 [22069521] Ответить | Цитировать Сообщить модератору |
Karp13 Member Откуда: Сообщений: 14 |
Мб у меня propagate не работает по факту? Или мб это нормальное поведение. Тогда мб динамически увеличивать MaximumErrorCount у главного пакета на число отловленных и обработанных мной ошибок?... хочется не городить костылей, но пока даже с ними не пойму как это решить |
30 янв 20, 14:12 [22069554] Ответить | Цитировать Сообщить модератору |
HandKot Member Откуда: Sergiev Posad Сообщений: 3027 |
propagate всегда должен работать нормально, если Вы всё правильно настроили Приложите картинку пакета и обозначьте где падает и где выставили св-во propagate и, как вариант, выставите propagate всего пакета, только тогда не будет понятно, если свалился в "неположенном месте" Сообщение было отредактировано: 30 янв 20, 14:45 |
||||
30 янв 20, 14:43 [22069581] Ответить | Цитировать Сообщить модератору |
Karp13 Member Откуда: Сообщений: 14 |
Ок, попробую: 1. Пакет "PackageFirst" вызывает пакет "PackageLoop". 2. Пакет "PackageLoop" вызывается другой пакет, который первый раз падает, а второй раз отрабатывает нормально. У "PackageLoop" параметр MaximumErrorCount = 1. А у его компонентов "For Loop Container" и "Execute Package Task" MaximumErrorCount = 0 (вроде не обязательно у двух делать, но исторически так сложилось). У компонента "Execute Package Task" есть handler OnError с выключенным Propagate. Допустим, я хочу, что бы ошибки "Execute Package Task" и вызываемого им пакета не всплывали наверх, так как я тут их обрабатываю. Но ошибки в других местах должны всплывать. 3. В итоге, хочу что бы пакет "PackageFirst" не падал. А он падает, т.к. DTS_W_MAXIMUMERRORCOUNTREACHED превышен, т.к. он заметил, что внизу была ошибка. Из-за этого не можем ещё выше грамотно мониторить ошибки, т.к. получаем сообщения об ошибках тогда, когда по факту всё хорошо, просто не с первой попытки. Как это преодолеть? Или что я делаю не так? PS: ой, сори за черные пятна на скрине, на моей машине такого не было) К сообщению приложен файл. Размер - 119Kb Сообщение было отредактировано: 30 янв 20, 16:12 |
30 янв 20, 16:08 [22069674] Ответить | Цитировать Сообщить модератору |
Karp13 Member Откуда: Сообщений: 14 |
PS: И я же правильно понимаю, что, судя по логу со скриншота, пакет First падает именно из-за превышения количества допустимых ошибок? Или всё таки как-то ошибка из нижнего пакета передаётся наверх? Как может быть можно это проследить?
Сообщение было отредактировано: 30 янв 20, 16:21 |
30 янв 20, 16:20 [22069683] Ответить | Цитировать Сообщить модератору |
HandKot Member Откуда: Sergiev Posad Сообщений: 3027 |
есть подозрение, что Propagate нужно выставить не у Execute Package Task, а у For Loop Container, т.к ошибку он уже сгенерировал и передал в контейнер. А вот контейнер и может прервать цепочку ошибок. Мне думается так Как раз это и было указано в ответе 12012386 Сообщение было отредактировано: 30 янв 20, 16:35 |
||||
30 янв 20, 16:34 [22069694] Ответить | Цитировать Сообщить модератору |
Karp13 Member Откуда: Сообщений: 14 |
HandKot, не помогло. ( Установил у хэндлера OnError контейнера "For Loop Container" значение Propagate = False - ничего не изменилось. Установил у хэндлера OnError контейнера "For Loop Container" значение Propagate = False, а у "Execute Package Task" у хэндлера OnError значение Propagate = True - ничего не изменилось. Установил у обоих Propagate = True - ничего не изменилось. Установил затем у всего пакета "PackageLoop" у хэндлера OnError значение Propagate = False - ничего не изменилось. Установил затем у всего пакета "PackageLoop" значение MaximumErrorCount = 0 - ничего не изменилось. Грусть какая-то. Я уже в третий раз штурмую эту проблему, с перерывами по два месяца, делаю те же манипуляции, получаю тот же результат. Эта программа смеётся надо мной. Продолжаю эксперименты. Сообщение было отредактировано: 30 янв 20, 17:10 |
30 янв 20, 17:08 [22069720] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |