ssis - 如何在同一事务中并行运行多个数据流任务?

标签 ssis

我在序列容器中添加了一个包含 3 个并行数据流任务的包。我需要实现这样的事务,如果所有 3 个数据流任务都成功执行,则事务完成。如果任何数据流任务失败,那么事务应该回滚。

我正在测试这个包,但它不起作用。

  • 我拿了一个 sequence container并拖放 data flow task 1 , data flow task 2data flow task 3并配置了所有三个数据流任务。
  • 在sequencee容器的属性中,我设置了以下属性

    Transaction: supported

    Isolation: readcommited
  • 在三个数据流任务的属性上,我设置了以下属性

    Transaction: supported

    Isolation: readuncommited
  • 当我运行包时,数据流任务 1 失败,但数据流任务 2 中的数据仍在插入和提交。

  • 即使数据流任务之一失败,如何防止数据流任务提交事务?

    最佳答案

    我同意其他答案,您的问题要求您将封闭容器上的事务范围设置为 Required .除非您更改了内部对象,否则它们的默认事务级别为 Supported这意味着如果可用,他们将参加交易。 Required设置将启动一个事务,并且为了完整性,NotSupported表示可执行文件/容器将忽略任何可能导致死锁的现有事务,具体取决于您的设计。

    我构建了一个示例包,该包删除并重新创建目标表以验证事务是否按预期运行。包中有 3 个数据流,每个数据流都向表 (1, 2, 4) 添加一个唯一值,以便这样的查询将指示值是否到达目标表。

    SELECT count(1) AS rc, sum(T.col1) AS Total FROM dbo.TrxTest T
    

    如您所见,有 7 个变量,3 个成对。 FailDataFlow 命名的是 bool 值,允许任何唯一的数据流失败/成功。这是通过在相应查询的 where 子句中引起除以 0 异常来实现的。

    data flow description

    序列容器的 TransactionOption 为 Required .各个数据流保留其默认的 TransactionOption Supported.
    第一次执行导致无法与分布式事务协调器通信,因为它被设置为在此 VM 上手动启动。纠正该问题导致包正确失败,因为“DFT 值 2”生成了除以零异常。尽管“DFT 值 1”上有一个绿色框,但运行上面的查询方式在我的表中没有显示任何内容。

    enter image description here

    将 FailDataFlow1 的值切换为 False 并重新运行在我的查询中分别显示了 3 和 7 的值,这表明所有行都已到达。

    您可以通过更改各种容器/可执行文件上的事务选项来进一步探索,以确保他们像其他受访者所指出的那样工作。

    关于ssis - 如何在同一事务中并行运行多个数据流任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10369943/

    相关文章:

    c# - 如何在 SSIS 中使用 C# 代码获取 Excel 文件最后保存的用户信息

    sql - 如何将引用类型: External Reference的父变量值传递给子包

    c# - 使用SSRS和SSIS自动化Excel输出c#

    c# - 从文件名中获取数字

    sql-server - SQL Server Integration Services SSIS 2005 - 如何让用户运行包?

    sql-server - 使用 SSIS 2012 将数据从 Sql Server 2014 导出到 Excel 文件

    sql-server - SSIS 输出列

    sql-server - SSIS(需要 ASCII): "Code page is 1252 and is required to be 20127"

    sql-server - 命令在控制台中运行良好,但在 Powershell 使用时运行不佳

    ssis - Biztalk 和 SSIS 之间的界限越来越模糊