SSIS 执行包任务 - 在子包失败时重试

Aka*_*ash 2 sql ssis

我有一个 SSIS 包,它调用许多执行 ETL 操作的执行包任务

有没有办法配置执行包任务,以便它们重试定义的次数(目前,在子包中的一个任务失败时,执行包任务失败。发生这种情况时,我想要任务在放弃和失败父包之前重试)

我知道的一个解决方案是为数据库中的每个包设置一个标志,成功时将其设置为定义的值,并在 for 循环容器中调用每个包,直到标志成功或计数超过预定义的重试次数。

有没有更干净或更通用的方法来做到这一点?

mak*_*ook 5

是的,放入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)

但是这个我还没有测试过...