Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 SSIS - как погасить ошибку в задаче?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31333
Есть SSIS - пакет. В нём в цикле (Foreach loop) выполняется несколько задач, и в частности, FTP task

Необходимо в случае ошибки в этой FTP task продолжить выполнение цикла (точнее, циклов - их несколько вложенных).

Как вообще это можно сделать?

Пока что я нашёл только один выход - во всех контейнерах SSIS-пакета отключить остановку при возникновении ошибки (установив параметр MaximumErrorCount=0), но это, конечно, неправильно, потому что мне не надо отключать контроль ошибок вообще для всех тасков пакета.

Все остальные методы не работают, например, установка ForceExecutionResult в Success...

Есть какое то решение?
1 фев 12, 12:29    [12010220]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - как погасить ошибку в задаче?  [new]
SergePnb
Member

Откуда: Киев
Сообщений: 456
alexeyvg,

А если перенаправить Error output в заглушку - скрипт таск например? Я такое делал для SQL task, там ошибка подавляется однозначно.

К сообщению приложен файл. Размер - 8Kb
1 фев 12, 12:36    [12010298]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - как погасить ошибку в задаче?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31333
SergePnb
alexeyvg,

А если перенаправить Error output в заглушку - скрипт таск например? Я такое делал для SQL task, там ошибка подавляется однозначно.

Картинка с другого сайта.
Сделал тестовый пакетик с SQL task - поведение ровно такое-же, управление переходит на заглушку, но в Foreach Loop тоже немедленно передаётся ошибка, и на следущей итерации цикла выполнение пакета прерывается.

При этом ещё до выполнения заглушки в выводе студии (в режиме отладки) появляется сообщение:

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]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - как погасить ошибку в задаче?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33528
Блог
Посмотрите свойства

FailParentOnFailure
FailPackageOnFailure
MaxumumErrorCount
FailTaskIfReturnCodeIsNotSuccessValue

правда я реализовывал загрузку через сторонний ftp-клиент который вызывался в Foreach loop через командную строку.
1 фев 12, 12:56    [12010555]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - как погасить ошибку в задаче?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33528
Блог
Вот этот использовал
http://ftps.codeplex.com/
он кстати позволяет выкачать все по маске файла
1 фев 12, 13:01    [12010614]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - как погасить ошибку в задаче?  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2977
если не ошибаюсь, то надо просто на контейнере выставить
MaxErrorCount = 0
FailParentOnFailure = false
failPackageOnfailure = false

и все
1 фев 12, 13:15    [12010789]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - как погасить ошибку в задаче?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31333
Критик
Вот этот использовал
http://ftps.codeplex.com/
он кстати позволяет выкачать все по маске файла
Да, спасибо, смотрел...

Видимо, мы тоже перейдём на что то такое, потому как в будущем вроде бы клиенту понадобится FTPS...



Критик
Посмотрите свойства

FailParentOnFailure
FailPackageOnFailure
MaxumumErrorCount
FailTaskIfReturnCodeIsNotSuccessValue

правда я реализовывал загрузку через сторонний ftp-клиент который вызывался в Foreach loop через командную строку.
FailParentOnFailure и FailPackageOnFailure усоановлены в False (по умолчанию для любой новой задачи)

MaxumumErrorCount для таска ни на что не влияет, а для контейнера гасит ошибку. Но к сожалению, даже если в контейнере установить MaxumumErrorCount=0, то он то не прекратит работу, но первый же контейнер уровнем выше вывалится :-(

FailTaskIfReturnCodeIsNotSuccessValue - это только для Process Task, как я понимаю, это не подходит...
1 фев 12, 13:16    [12010808]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - как погасить ошибку в задаче?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31333
HandKot
если не ошибаюсь, то надо просто на контейнере выставить
MaxErrorCount = 0
Вывалится контейнер уровнем выше :-(

А для всех установить это свойство нельзя - это значит выключить вообще всю обработку ошибок.

Вообще странно, такая куча средств по управлению ошибками, а управлять нельзя :-)
1 фев 12, 13:18    [12010823]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - как погасить ошибку в задаче?  [new]
SergePnb
Member

Откуда: Киев
Сообщений: 456
HandKot
если не ошибаюсь, то надо просто на контейнере выставить
MaxErrorCount = 0
FailParentOnFailure = false
failPackageOnfailure = false

и все


Точно, MaxErrorCount = 0 на контейнере помогает повторять тело и игнорировать ошибку; все остальное значения по умолчанию.
1 фев 12, 13:19    [12010838]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - как погасить ошибку в задаче?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31333
SergePnb
HandKot
если не ошибаюсь, то надо просто на контейнере выставить
MaxErrorCount = 0
FailParentOnFailure = false
failPackageOnfailure = false

и все


Точно, MaxErrorCount = 0 на контейнере помогает повторять тело и игнорировать ошибку; все остальное значения по умолчанию.
Увы :-(
1 фев 12, 13:42    [12011157]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - как погасить ошибку в задаче?  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2977
есть
если стоя на контейнере, в котором может произойти ошибка и ее не надо передавать дальше, то надо перейти на вкладку Event Handler, выбрать св-во OnError и в окне Variables найти с именем Propagate и выставить ей значение false

MaxErrorCount должно быть в 0
1 фев 12, 15:26    [12012386]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - как погасить ошибку в задаче?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31333
HandKot
есть
если стоя на контейнере, в котором может произойти ошибка и ее не надо передавать дальше, то надо перейти на вкладку Event Handler, выбрать св-во OnError и в окне Variables найти с именем Propagate и выставить ей значение false
Блестяще! Вы из тех самых редких экспертов по SSIS! :-)

Поставил это свойство на интересущем меня таске, при этом свойства MaxErrorCount и прочие установил по умолчанию. Сразу всё стало работать, как и хотелось - ошибку таск генерит, я её обрабатываю, как мне надо, при этом выполнение продолжается.

Спасибо!
1 фев 12, 16:01    [12012747]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - как погасить ошибку в задаче?  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2977
alexeyvg
предалгаю Вам закинуть это решение в ФАК
я бы и сам мог написать, но из меня писарчук еще тот :)
1 фев 12, 16:10    [12012850]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - как погасить ошибку в задаче?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31333
HandKot
alexeyvg
предалгаю Вам закинуть это решение в ФАК
я бы и сам мог написать, но из меня писарчук еще тот :)
Хорошо, попробую написать, и заодно обратить внимание народа на системные переменные событий и задач в пакете - многие не представляют, что они есть и нужны, не обращают на них внимания, когда ищёт пути решения каких то проблем.
1 фев 12, 16:16    [12012932]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - как погасить ошибку в задаче?  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2977
точно и меньше будет встерчаться
автор
Вообще странно, такая куча средств по управлению ошибками, а управлять нельзя :-)
1 фев 12, 16:18    [12012970]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - как погасить ошибку в задаче?  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2977
вот нашел, кому интересно, по этому поводу статью
SSIS Event Handler Variables – Propagate
2 фев 12, 08:49    [12016667]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: SSIS - как погасить ошибку в задаче?  [new]
tashkafox
Member

Откуда: Москва
Сообщений: 106
HandKot, А в свежей SSDT можно так сделать?
Я остановилась на том, что System Variables не могу открыть...

К сообщению приложен файл. Размер - 2Kb
15 май 19, 17:58    [21885645]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - как погасить ошибку в задаче?  [new]
tashkafox
Member

Откуда: Москва
Сообщений: 106
tashkafox, нашла. в Grid Options включается

К сообщению приложен файл. Размер - 6Kb
15 май 19, 18:17    [21885660]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - как погасить ошибку в задаче?  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - как погасить ошибку в задаче?  [new]
Karp13
Member

Откуда:
Сообщений: 14
Мб у меня propagate не работает по факту?
Или мб это нормальное поведение. Тогда мб динамически увеличивать MaximumErrorCount у главного пакета на число отловленных и обработанных мной ошибок?... хочется не городить костылей, но пока даже с ними не пойму как это решить
30 янв 20, 14:12    [22069554]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - как погасить ошибку в задаче?  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2977
Karp13
Мб у меня propagate не работает по факту?
Или мб это нормальное поведение. Тогда мб динамически увеличивать MaximumErrorCount у главного пакета на число отловленных и обработанных мной ошибок?... хочется не городить костылей, но пока даже с ними не пойму как это решить

propagate всегда должен работать нормально, если Вы всё правильно настроили
Приложите картинку пакета и обозначьте где падает и где выставили св-во propagate

и, как вариант, выставите propagate всего пакета, только тогда не будет понятно, если свалился в "неположенном месте"

Сообщение было отредактировано: 30 янв 20, 14:45
30 янв 20, 14:43    [22069581]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - как погасить ошибку в задаче?  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - как погасить ошибку в задаче?  [new]
Karp13
Member

Откуда:
Сообщений: 14
PS: И я же правильно понимаю, что, судя по логу со скриншота, пакет First падает именно из-за превышения количества допустимых ошибок? Или всё таки как-то ошибка из нижнего пакета передаётся наверх? Как может быть можно это проследить?

Сообщение было отредактировано: 30 янв 20, 16:21
30 янв 20, 16:20    [22069683]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - как погасить ошибку в задаче?  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2977
Karp13
Ок, попробую:

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 превышен, т.к. он заметил, что внизу была ошибка.
Из-за этого не можем ещё выше грамотно мониторить ошибки, т.к. получаем сообщения об ошибках тогда, когда по факту всё хорошо, просто не с первой попытки.
Как это преодолеть? Или что я делаю не так?


есть подозрение, что Propagate нужно выставить не у Execute Package Task, а у For Loop Container, т.к ошибку он уже сгенерировал и передал в контейнер. А вот контейнер и может прервать цепочку ошибок. Мне думается так
Как раз это и было указано в ответе 12012386

Сообщение было отредактировано: 30 янв 20, 16:35
30 янв 20, 16:34    [22069694]     Ответить | Цитировать Сообщить модератору
 Re: SSIS - как погасить ошибку в задаче?  [new]
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 Ответить