【问题标题】:transaction control in parent child packages ssis父子包ssis中的事务控制
【发布时间】:2015-07-02 16:31:58
【问题描述】:

我有父包,其中我有用于计数平面文件的 foreach 循环,并在其中我一个一个地处理每个文件,同时调用(执行包任务)我有序列容器的子包。在子包序列容器中,我有两个流程任务 -one 用于从导入模式表中删除数据,并将平面文件中的所有数据导入其中,由父包传递。 -second 是将新的和更新的行从导入模式移动到相关的暂存模式表。

现在我为父控制流设置“必需”事务属性,而其中的所有其他组件都“支持”。 并为子控制流设置“支持”事务属性,并为其中的所有组件设置相同的事务属性。因此,当我执行父包时,它卡在子包中的第二个流程任务上。

如果任何包中发生任何故障或错误,我想回滚所有事务。

请提供任何帮助。

【问题讨论】:

  • 您是在询问您是否正确配置了事务以便在发生故障时启用回滚,或者您是在说您有一个问题,即进程“卡在”第二个流程任务上?
  • 我尝试了这种方法来回滚包中的所有事务,而我却陷入其中。但如果你向我推荐另一种方法,我可以考虑。
  • 听起来您已经正确配置了软件包并且您正在运行 MSDTC 服务。但我不清楚卡住的部分是什么?您是否希望能够终止进程并仍然以某种方式回滚,即使从技术上讲没有发生错误?
  • 实际上,如果任何包中发生任何故障,我想回滚所有事务,因此我尝试配置两个包的事务属性,以便我可以回滚所有事务,但是当我设置这些属性时,我陷入了困境子包的第二个流程任务。因此,如果您有任何其他策略或解决方案,请告诉我。
  • 是的,没有发生错误或失败,但它卡在子包的第二个流程任务中(在验证阶段开始)。

标签: sql-server ssis transactions parent-child


【解决方案1】:

如果 SSIS 事务不适合您,请考虑重新设计包设计。是否可以在最终将其提交到最终结果表之前多次分解步骤和阶段数据。

老实说,我从不使用交易。对于 ETL 流程,我将其分为 4 个不同的关注领域:

  1. 提取 - 从源中按原样获取数据并将其物理暂存到表中。临时表看起来与源表完全相同。这最大限度地减少了源系统中锁定的中断。
  2. Cleanse - 在不考虑其他表的情况下清理数据。清理可以在视图中执行,也可以使用暂存数据的单独包执行。
  3. Conform - 将来自多个来源的数据放入一个表中。此表看起来像目标表(即事实、维度)
  4. 加载 - 加载到最终结果表中,仅与加载有关,以尽量减少对最终用户访问表的中断。

我为软件包构建了可重新启动性,因此如果它们已经完成了前几个步骤,它们就不需要重新开始。他们可以从上次中断的地方继续并完成 ETL 流程。

如果我要提取多个文件,我会为每个文件构建一个包。如果有一系列具有相同架构的文件需要循环。我会在考虑可重新启动的情况下构建该过程。那就是:

  1. 截断临时表
  2. 一次或并行将一个文件提取到临时表中
  3. 归档文件

如果过程失败,在这种情况下,我们可以从头开始。因为我们将数据转储到临时表(可以是堆)中,所以这是一个超级快速高效的过程。

如果您主要关心的是您不希望特定的最终结果表处于不一致的状态,那么通过暂存数据,您可以轻松地将最终插入/更新过程包装到 SQL 事务中。

这是非常笼统的建议,但它的要点是,不要使用事务,将流程分解为多个步骤,并在实际需要的地方使用 SQL 事务。希望这会有所帮助。

【讨论】:

  • 让我解释一下整个场景或要求: 1. 开始审计包和统计源文件夹中的文件。 2.然后将文件信息一一存储在任意表中。 3. 然后对于文件的每个循环,我必须创建子包,以便我可以为每个文件实现原子处理。 4. 子包有两个主要任务首先截断导入模式表,然后将文件数据按原样插入该表中。然后在第二个任务中将导入的表数据与暂存表数据合并。
  • 5.然后退出子包并将控制权交还给父包。 6. 归档处理的文件。 7. 审核包裹的结束。因此,我在使用默认事务属性正常工作时实现了每个步骤,但是当涉及到事务控制时,我进行了相应配置,但它陷入了第二个任务,如上面第 4 点所述。
  • 我在 Reqs 中没有看到任何会迫使您使用事务的内容。只要文件在最后存档,如果出现错误,没有什么可以阻止您从顶部重新启动。
  • 现在我使用 SQL 事务来控制事务。但非常感谢马克帮助解决它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-19
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
相关资源
最近更新 更多