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