在包中使用检查点

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

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

  • 避免重复下载和上载大型文件。例如,对于每次下载都使用 FTP 任务下载多个大型文件的包,如果下载单个文件失败,则可以重新启动该包,只下载该失败的文件。

  • 避免重复加载大量数据。例如,对于为每个维度使用不同的大容量插入任务向数据仓库中的维度表执行大容量插入的包,如果某一维度表的插入失败,则可以重新启动该包,只重新加载该失败的维度。

  • 避免重复聚合值。例如,如果包需要计算多个聚合,例如求平均值和求和,而且使用不同的数据流任务执行每个聚合,则在计算一个聚合失败时,可以重新启动该包,只重新计算该失败的聚合。

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

如果重新启动包,Integration Services 不会重新加载包配置。包改为使用写入检查点文件的配置信息。这样可以确保包在再次运行时使用的是与包出现故障时相同的配置。

定义重新启动点

以下 Integration Services 组件是可以使用检查点重新启动的原子工作单元:

  • 任务   封装单个任务的任务宿主容器是可以重新启动的最小原子工作单元。

    注意注意

    由于包含包中所有内容的数据流任务是一种原子工作单元,所以无法在数据流中间重新启动包。为了避免重新运行整个数据流,可以将包设计为包括多个数据流任务。这样,重新启动包时,将只重新运行失败的数据流任务。

  • 事务处理容器   事务处理容器也是一种可以重新启动的原子工作单元。如果在事务处理容器运行时停止某个包,则该事务将会结束,并且将回滚该事务执行的所有工作。但是,检查点文件中并不包含子容器已经完成的工作的相关信息;重新启动包时将重新运行事务处理容器及其子容器。

    为避免检查点与事务之间可能出现的冲突,Integration Services 将在以下情况下不保存关于容器内部发生情况的检查点信息:

    • 容器的 TransactionOption 属性的值为 Required。

      - 或 -

    • 容器的 TransactionOption 属性的值为 Supported,但父容器拥有事务或是在事务中注册。

    注意注意

    在同一个包中使用检查点和事务可能会导致意外的结果。例如,当包失败并从某个检查点重新启动时,该包可能会重复已成功提交的事务。

  • Foreach 循环容器   Foreach 循环容器是另外一种可以重新启动的原子工作单元。但是,检查点文件中并不包含子容器已经完成的工作的相关信息;重新启动包时将重新运行 Foreach 循环容器及其子容器。

将包配置为重新启动

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

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

属性

说明

CheckpointFileName

指定检查点文件的名称。

CheckpointUsage

指定是否使用检查点。

SaveCheckpoints

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

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

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

设置 CheckpointUsage 属性

下表列出了 CheckpointUsage 属性的值。

说明

Never

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

Always

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

IfExists

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

注意注意

dtexec 的 /CheckPointing on 选项等效于将包的 SaveCheckpoints 属性设置为 True,并将 CheckpointUsage 属性设置为 Always。有关详细信息,请参阅 dtexec 实用工具

选择检查点文件的位置

在故障转移群集中(Integration Services 安装在该群集的多个节点上),您可以将检查点文件保存到某个共享位置。之后在出现故障转移时,可以自群集中其他节点上的最后一个检查点重新启动中断的包。

保护检查点文件

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

配置检查点属性

Integration Services 图标(小) 使 Integration Services 保持最新

若要从 Microsoft 获得最新的下载内容、文章、示例和视频,以及从社区获得所选解决方案,请访问 MSDN 或 TechNet 上的 Integration Services 页:

若要获得有关这些更新的自动通知,请订阅该页上提供的 RSS 源。

更改历史记录

更新的内容

  • 在“定义重新启动点”一节中明确了哪些组件是工作单元。

  • 添加了“选择检查点文件的位置”一节。