【问题标题】:How do I run multiple data flow tasks in parallel within the same transaction?如何在同一个事务中并行运行多个数据流任务?
【发布时间】:2012-04-29 05:30:19
【问题描述】:

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

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

  • 我拿了一个sequence container并拖放了data flow task 1data flow task 2data flow task 3并配置了所有三个数据流任务。

  • 在sequencee容器的属性中,我设置了以下属性

    Transaction: supported

    Isolation: readcommited

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

    Transaction: supported

    Isolation: readuncommited

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

即使其中一个数据流任务失败,如何防止数据流任务提交事务?

【问题讨论】:

  • 你在用 D(编程语言)做你的项目吗? o.O

标签: ssis


【解决方案1】:

我同意其他答案,您的问题要求您将封闭容器上的事务范围设置为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 命名的是允许任何唯一数据流失败/成功的布尔值。这是通过在相应查询的 where 子句中导致除以 0 异常来实现的。

序列容器的 TransactionOption 为 Required。各个数据流保留其默认的 TransactionOption Supported.

第一次执行导致无法与分布式事务协调器通信,因为它在此 VM 上设置为手动启动。更正该问题导致程序包正确失败,因为“DFT 值 2”产生了除以零异常。尽管“DFT 值 1”上有一个绿色框,但运行上面的查询方式在我的表中什么也没有显示。

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

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

【讨论】:

    【解决方案2】:

    您必须为序列容器设置事务选项 =required 并为所有数据流任务设置 =supported 才能实现所需。

    我总是将事务选项设置为包级别所需并支持所有其他任务。这样,如果任何任务失败,事务就会回滚..

    【讨论】:

    • 我遵循你给出的指示,但它不起作用。那个时候所有的任务都是好的行,那个时候它也失败了。请告诉我如何获得。
    • 我遵循你给出的指示,但它不起作用。那个时候,如果好的行到达源级别,那么它的成功。假设任何任务失败,那个时候它不是回滚.plz我如何acchive。
    【解决方案3】:

    你几乎做对了所有事情。

    首先,忽略事务隔离级别,它在 readcommited 上有一个错误,如果你想这样做,你必须手动进行,请参阅我在 this 帖子上的回答作为示例。

    但我不明白为什么要配置隔离级别,您的问题显然可以通过隔离级别解决。您缺少的是在序列容器上将事务设置为 required 。将它们设置为 Supported 意味着任务不会启动事务,而是加入由其父容器启动的任何事务(如果它退出)。

    因此,通过在序列容器上将事务设置为 required 并在您的数据流上受支持,它应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 2014-06-21
      相关资源
      最近更新 更多