SSIS中如何配置CheckPoint实现For Loop Container从失败处重启
解决SSIS For Loop容器Checkpoint重启无法续跑的配置方法
前置Checkpoint基础配置确认
先确保包级别的基础配置符合续跑要求:
- 包属性设置:
SaveCheckpoints设为TrueCheckpointFileName填写本地有效文件路径(如C:\ETL\Checkpoint\MyPackage.xml)CheckpointUsage设为IfExists
- 变量配置:
- 控制循环的
@CounterNumber变量设为包级作用域,默认值设为0 - 不要开启变量的
EvaluateAsExpression属性
- 控制循环的
- 容器/任务属性:
- For Loop容器、容器内部所有任务的
FailPackageOnFailure属性都设为True,确保失败时会将当前变量值写入Checkpoint文件
- For Loop容器、容器内部所有任务的
核心For Loop表达式修改
问题根源是默认的静态InitExpression会在每次包启动时强制重置计数器,覆盖Checkpoint记录的数值,按以下规则修改三个表达式即可:
- InitExpression(初始化表达式):替换静态赋值为条件判断,仅首次执行初始化计数器,重启时复用Checkpoint记录的值:
@CounterNumber = @CounterNumber == 0 ? 1 : @CounterNumber - EvalExpression(判断表达式):保留原有逻辑即可,你的场景可继续使用
@CounterNumber <=5 - AssignExpression(赋值表达式):保留原有迭代逻辑即可,比如
@CounterNumber = @CounterNumber + 1
效果验证
按以上配置后:
- 首次执行包时,
@CounterNumber默认值为0,初始化后变为1,正常从第一轮开始循环 - 若第二轮(
@CounterNumber=2)执行失败,Checkpoint文件会自动记录当前@CounterNumber=2 - 重启包时,InitExpression判断
@CounterNumber不为0,直接复用已有值2,从第二轮开始继续执行,不会从头循环
注意:如果需要全量重新执行循环,直接删除配置的Checkpoint文件即可,包会重新从第一轮开始运行。
内容的提问来源于stack exchange,提问作者JoshuaG
相关产品推荐
相关产品推荐

