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