我有一个SSIS包,它调用执行ETL操作的许多执行包任务
是否有办法配置执行包任务,以便它们重试定义的次数(当前,在子包中的任务之一失败时,执行包任务失败。当发生这种情况时,我会就像在放弃和失败父包之前要重试的任务一样)
我知道的一个解决方案是为数据库中的每个包设置一个标志,在成功时将其设置为定义的值,并在for循环容器中调用每个包,直到标志成功或计数超过预定义的重试计数。
是否有更清洁或更通用的方法来执行此操作?
答案 0 :(得分:4)
是的,将Execute Package Task
放入For Loop Container
。定义一个变量,它将执行计数,一个用于successrun指示符和一个MAX_COUNT Constance。在包任务 - 表达式的属性中,定义
FailPackageOnFailure - False
执行任务后放置Script Task
读/写Vars:SuccessfulRun
,脚本:
Dts.Variables["SuccessfulRun"].Value = 1
For循环的属性:
InitExpression - @Val_Counter = 0
EvalExpression - @Counter < @MAX_COUNT && @SuccessfulRun == 0
AssingExpression - @Val_Counter = @Val_Counter + 1
使用Success line将PackageTask与ScriptTask连接。
OR
在For Loop Container
定义表达式
MaximumErrorCount - Const_MAX_COUNT
但是这个还没有经过我的测试......