微软BI系列——Checkpoints在SSIS中的妙用收藏

来源:互联网 发布:使用淘宝客推广被降权 编辑:程序博客网 时间:2024/04/28 20:26

 

SQL Server Integrated Services(SSIS)平台下,通常一个package运行失败后,经过失败原因的检查和处理,会从头到尾完整的再运行一遍。由此带来的问题是:如果package运行到最后一步失败了,刚好成功运行的有非常耗时数据流任务,在之后将不得不重新运行这些任务。通过对ETL package的checkpoints进行设置可以从失败的任务开始重新运行该package,大大的减少了重新运行package所耗的时间。

什么是Checkpoints?

在SSIS中,当package执行失败时,Checkpoints允许将信息保存到Checkpoints文档中,通过设置,可以决定下次执行时从哪个位置继续执行。

Checkpoints的属性:

  • CheckpointFileName:设置存放Checkpoints信息的路径,可以事先创建好文件,通常使用.txt格式。
  • CheckpointUsage:决定是否使用Checkpoints,有三个选项:“Never”,表示不使用Checkpoints文件,package每次都从起点开始运行;“IfExists”表示若存在Checkpoints Package将上一次执行失败的地方重新启动,若不存在,将从package起点开始运行;”Always”表示总是使用Checkpoints文件,package每次都从执行失败的地方开始执行,如果package没有发现Checkpoints文件,package将不能执行。
  • SaveCheckpoints:“True”表示保存Checkpoints文件,”False”表示不保存Checkpoints文件。

与Checkpoints相关的另外一个属性:FailPackageOnFailure,当容器遇到执行错误时,将终止程序包的执行,程序包从容器中直接重启。这个属性可以分别对package和控制流进行设置。若对package设置为true,而运行失败的控制流设置为false,则下一次执行时将从运行失败的下一个控制流开始执行;若运行失败的控制流设置为true,则不管package的设置是否为true,下一次执行都将从运行失败的控制流开始。而产生Checkpoints文件的必要条件是:对运行失败的控制流或者package,至少有一者的该属性设置为true。

实际运用中,经常碰到的是下面几种情况:

1、  单独的控制流失败,Package重新运行从失败的控制流开始运行。

举例:如图1所示,Success1和Success2两个控制流运行都会成功,而Failure运行会失败。

 

 

图 1

下面将该Package的Checkpoints属性设置如下:

  • CheckpointFileName="c:/Checkpoint.txt"
  • CheckpointUsage=IfExists
  • SaveCheckpoints=True

然后将所有控制流和Package的FailPackageOnFailure属性设置为True,运行后将在标有Failure的控制流停止(失败),再次运行,Package从Failure标识的控制流开始运行,如图2所示。

 

图 2

2、  容器里的一个任务失败,希望:

a)   只对该任务重新运行

这种情况下的设置同1没有区别,唯一需要注意的是容器只能序列容器。

b)   对整个容器内容重新运行

这种情况较为常见,比如经常会需要清空一张表,然后运行一个数据流将数据填充进去,这时候就需要将执行清空动作的控制流同其后运行的数据流放在一个容器里面。一旦容器里的任何一处运行错误,该容器应该可以重新处理。这里可以使用Foreach容器将需要一起处理的控制流放入其中。

    举例:如图3所示,当控制流运行到有Failure标识的SQL任务时Package失败。这里的Checkpoints设置与1类似,此处不再赘述。FailPackageOnFailure属性保持默认设置即可。

 

图 3

Foreach循环容器设置如图4:

 

图 4

在For Each Item枚举器定义列内添加一String类型的列。

再次运行该Package,如图5所示,运行失败的Foreach循环容器将整体重新运行:

 

图 5

附件:示例Packages:Checkpoint Demo

参考文献:

[1]http://blogs.conchango.com/jamiethomson/archive/2005/04/20/SSIS_3A00_-Checkpoint-clarification-_2D00_-Recovering-failed-packages.aspx

[2] http://bbs.51cto.com/archiver/tid-454221.html

 

作    者:陈立,北京迈思奇科技有限公司B I 工程师。专业从事数据仓库建模、 ETL流程开发等工作。

更多相关资源,请访问北京迈思奇科技有限公司(http://www.minesage.com

原创粉丝点击