在包中使用检查点

更新日期: 2007 年 9 月 15 日

SQL Server 2005 Integration Services (SSIS) 可以从失败点重新启动失败的包,而不是重新运行整个包。 如果包配置为使用检查点,则关于包执行的信息会写入检查点文件中。 当重新运行失败的包时,可以使用检查点文件从失败点重新启动该包。 如果包成功运行,则会删除该检查点文件,然后在下次运行包时重新创建相应的检查点文件。

在包中使用检查点可以提供下列好处:

  • 避免重复下载和上载大型文件。 例如,对于每次下载都使用 FTP 任务下载多个大型文件的包,如果下载单个文件失败,则可以重新启动该包,只下载该失败的文件。
  • 避免重复加载大量数据。 例如,对于为每个维度使用不同的大容量插入任务向数据仓库中的维度表执行大容量插入的包,如果某一维度表的插入失败,则可以重新启动该包,只重新加载该失败的维度。
  • 避免重复聚合值。 例如,如果包需要计算多个聚合,例如求平均值和求和,而且使用不同的数据流任务执行每个聚合,则在计算一个聚合失败时,可以重新启动该包,只重新计算该失败的聚合。

如果包配置为使用检查点,Integration Services 将捕获检查点文件中的重新启动点。 失败的容器类型以及功能(例如事务)的实现都会影响在检查点文件中所记录的重新启动点。 检查点文件中还捕获变量的当前值。 但是,数据类型为 Object 的变量的值不保存在检查点文件中。

定义重新启动点

封装单个任务的任务宿主容器是可以重新启动的最小原子工作单元。 Foreach 循环容器和事务处理容器也被视为原子工作单元。

如果在事务处理容器运行时停止某个包,则该事务将会结束,并且将回滚该容器执行的所有工作。 当重新启动该包时,会重新运行失败的容器。 检查点文件中不记录事务处理容器的任何子容器的完成情况。 因此,当重新启动包时,会再次运行事务处理容器及其子容器。

ms140226.note(zh-cn,SQL.90).gif注意:
在相同的包中使用检查点和事务会导致意外结果。 例如,当包失败并从某个检查点重新启动时,包可能会重复已经成功提交的事务。

当重新启动包时,会再次运行 Foreach 循环容器及其子容器。 如果循环中的子容器已成功运行,则不会将其记录在检查点文件中,而是重新运行子容器。

在重新启动包时,不会重新加载包配置,包使用写入检查点文件中的配置信息。 这就确保包在重新运行时使用的是与失败时相同的配置。

包只能在控制流级重新启动。 您无法重新启动处于数据流中间的包。 为了避免重新运行整个数据流,可以将包设计为包括多个数据流,每个数据流使用不同的数据流任务。 这样,在重新启动包时,将只需重新运行一个数据流任务。

将包配置为重新启动

检查点文件包括所有已完成的容器的执行结果、系统变量和用户定义的变量的当前值以及包配置信息。 该文件还包括包的唯一标识符。 若要成功重新启动包,检查点文件中的包标识符和包必须匹配,否则重新启动将失败。 这样可以防止包使用其他包版本所写的检查点文件。 如果包成功运行,则在包重新启动后,将会删除该检查点文件。

下表列出了可设置为实现检查点的包属性。

属性 说明

CheckpointFileName

指定检查点文件的名称。

CheckpointUsage

指定是否使用检查点。

SaveCheckpoints

指示包是否保存检查点。 此属性必须设置为 True,才能从失败点重新启动包。

另外,对于包中要标识为重新启动点的所有容器,必须将 FailPackageOnFailure 属性设置为 true

您可以使用 ForceExecutionResult 属性测试包中检查点的使用情况。 通过将容器或任务的 ForceExecutionResult 设置为 Failure,可以模拟实时的失败。 当重新运行包时,将重新运行失败的任务和容器。

检查点用法

CheckpointUsage 属性可设置为下列值:

说明

Never

指定不使用检查点文件,包从包工作流的起点开始运行。

Always

指定始终使用检查点文件,包从上一次执行失败的点重新启动。 如果找不到检查点文件,则包失败。

IfExists

指定如果存在检查点文件则使用该文件。 如果检查点文件存在,则包从上一次执行失败的点重新启动;如果检查点文件不存在,则包从包工作流的起点开始运行。

ms140226.note(zh-cn,SQL.90).gif注意:
dtexec 的 /CheckPointing on 选项等同于将包的 SaveCheckpoints 属性设置为 True 并将 CheckpointUsage 属性设置为“Always”。 有关详细信息,请参阅 dtexec 实用工具

保护检查点文件

包级别的保护不包括保护检查点文件,必须单独保护这些文件。 检查点数据只能存储在文件系统中,应当使用操作系统访问控制列表 (ACL) 来保护用于存储该文件的位置或文件夹。 重要的是务必保护检查点文件,因为它们包含了有关包状态的信息,包括变量的当前值。 例如,变量可能包含由很多行私人数据(如电话号码)组成的记录集。 有关详细信息,请参阅保护包使用的文件

配置检查点属性

请参阅

概念

Integration Services 概述

其他资源

在 SSIS 设计器中创建包

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2007 年 9 月 15 日

更改的内容:
  • 添加了有关在相同的包中使用检查点和事务的说明。

2006 年 7 月 17 日

更改的内容:
  • 说明了 dtexec 选项 CheckPointing on 等同于将包属性 SaveCheckpoints 设置为 True 并将 CheckpointUsage 设置为“Always”。

2006 年 4 月 14 日

更改的内容:
  • 添加了有关数据类型为 Object 的变量的信息。

2005 年 12 月 5 日

更改的内容:
  • 添加了有关保护检查点文件的信息。