2013-07-19 53 views
0

我有一个SSIS包,它叫号执行其执行ETL操作包任务的SSIS执行包任务 - 失败重试子包

有没有配置执行包任务,使他们重试的方式(当前,在子包中的任务失败时,执行包任务失败,当发生这种情况时,我希望在放弃和失败父包之前重试该任务)

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

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

回答

3

是的,把Execute Package TaskFor Loop Container。定义一个变量,它将执行计数,一个用于成功运行指标和一个MAX_COUNT Constance。在包任务的性质 - 表达式,定义

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 

使用成功行连接PackageTask和ScriptTask。

OR

For Loop Container定义表达

MaximumErrorCount - Const_MAX_COUNT 

但是这一次并没有被我又测试...

+0

将是条件退出从什么for循环,如果子包的第一次(或第n次,N Akash

+0

查看已更新的答案 – makciook

+0

太棒了,会使用此方法的稍微修改版本 – Akash