在包中合并事务

包使用事务将任务执行的数据库操作绑定到原子单元中,这样做可以维护数据的完整性。因为作为事务组成部分的所有数据库操作都要一起提交或回滚,所以您可以确保数据处于一致的状态。例如,如果包具有多个数据流任务,每个任务更新数据并将数据插入不同数据库表中,则该包可以使用事务来保证在数据流中执行的所有更改都已提交或回滚。分布式事务允许将多个操作系统上完全不同的操作绑定到单个事务中,从而将此概念更深化了一步。

在包中使用事务可以有以下用途:

  • 将几项任务的结果收集到单个事务中,以确保一致的更新。例如,存储在两个不同表中的有关订单和货品项目的信息可以由两个同时成功或同时失败的任务进行上载。

  • 确保对多台数据库服务器进行一致的更新。例如,在一个事务环境的上下文中,客户地址可以在两个不同的联机事务处理 (OLTP) 系统中更改。

  • 保证在异步环境中更新。例如,包可以使用消息队列任务来读取并删除包含要上载的文件的名称的消息。如果上载文件的任务失败,则随后的回滚将撤消数据库更改并将该消息放回队列中。

  • 在单个包的控制下执行多个事务。例如,使用执行包任务,包可以在三台不同的服务器上同时运行一个全天事务序列。

所有 MicrosoftIntegration Services 容器类型(包、For 循环、Foreach 循环和序列容器以及封装每个任务的任务宿主)都可以配置为使用事务。Integration Services 提供了三个用于配置事务的选项:NotSupportedSupportedRequired

  • Required 指示该容器启动一个事务,除非已经存在由其父容器启动的事务。如果事务已经存在,容器将联接该事务。例如,如果没有配置为支持事务的包包括一个使用 Required 选项的序列容器,则该序列容器会启动其自己的事务。如果包已经配置为使用 Required 选项,则序列容器将联接包事务。

  • Supported 指示容器不启动事务,但将联接由其父容器启动的任何事务。例如,如果具有四个执行 SQL 任务的包启动了一个事务,而且所有这四个任务都使用 Supported 选项,则在其中任何一个任务失败时都会回滚执行 SQL 任务所执行的数据库更新。如果包没有启动事务,则四个执行 SQL 任务将不绑定到该事务,而且除了回滚失败的任务所执行的更新外,不回滚任何其他数据库更新。

  • NotSupported 指示容器不启动事务,也不联接现有事务。由父容器启动的事务不影响已经配置为不支持事务的子容器。例如,如果包配置为启动事务,而包中的 For 循环容器使用 NotSupported 选项,则在 For 循环中的任务失败时不回滚任何任务。

通过设置容器的 TransactionOption 属性,您可以配置事务。可以使用 Business Intelligence Development Studio 中的**“属性”**窗口设置此属性,也可以以编程方式设置此属性。有关详细信息,请参阅开发人员指南 (Integration Services)

注意注意

TransactionOption 属性影响是否应用容器请求的 IsolationLevel 属性的值。有关详细信息,请参阅设置包属性主题中 IsolationLevel 属性的说明。

将包配置为使用事务

外部资源

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

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

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