-1

对于我迄今为止编写的所有 ETL,我从未对它们进行过事务处理——即,如果表 4 失败,则将所有内容回滚。

这方面的最佳做法是什么?

“BeginTran + Commit”或不“BeginTran + Commit”

编辑:我有一个主包调用 4 个其他包 - 是否可以将它们全部汇总到一个事务中?

4

3 回答 3

2

在 SSIS,我总是Begin Trans + Commit. 我想确保如果包失败,我可以毫无问题地重新运行包(或者必须找到实际插入的行)。

它只是使恢复和清理变得更加容易。

于 2009-07-31T19:27:29.823 回答
2

以可管理的批量大小开始+提交。您不想每晚将 6 小时的导入打包到单个事务中。将您的批次保持在最多可以在 2-3 分钟内完成的大小。您将遇到导致 ETL 失败的数据纯度问题是给定的,因此至少减少对可管理的影响(即不要触发将持续另外6 小时才能完成的回滚)。

于 2009-07-31T19:39:18.037 回答
1

您经常在 ETL 中移动太多数据以使用 SQL 事务(日志必须存储所有数据才能回滚,记住)。我更喜欢设计包,以便它们可以非破坏性地重新运行。理想情况下,它们应该设置为如果它们在中途死亡,您可以启动它们,它们将在大约停止的地方继续。有时这样做会降低性能,但我认为这是值得的。

从技术上讲,您可以将包汇总到单个事务中;实际上,也许不是。

于 2009-07-31T20:19:46.177 回答