0

我们需要一种方法来了解自上次从该数据库导入数据以来 TeraData 数据库中哪些行发生了变化。TeraData 数据库中的表或表中的数据没有被证明是我们可以用来确定这一点的可靠变化信号。在 SQL Server 中,更改跟踪功能似乎完全符合我们的需要,但源系统是 TeraData。有谁知道 TeraData 中是否有一个功能,或者与 TeraData 一起使用的第三方工具,可以有效地将 SQL Server 更改跟踪提供的功能添加到 TeraData 数据库中?

4

1 回答 1

0

Teradata 是一个 OLAP 数据库。您在 Sql Server 中引用的功能也用于 OLTP 类型处理。Teradata 假设您将执行大型集合操作,而不是小型单行级操作。Teradata 的优化器和功能集的一切都基于为那些大型集合操作生成性能。

我们设法在 Teradata 数据库中跟踪更改的唯一方法是:

  1. 将更新时间戳属性添加到由更改数据的代码维护的表中。(用户界面或脚本或数据库中的触发器)
  2. 或者在您希望跟踪的每个表上创建一个触发器。此触发器可以: A. 仅将记录键和更新时间戳附加到另一个表 B. 或将整个属性集和更新时间戳附加到另一个表
  3. 或在每个时间窗口捕获整个表,并比较数据。我们只对非常小的数据集这样做。(域数据)

我们已经为包括 Oracle 和 Teradata 在内的各种源数据库做到了这一点。触发器相当简单,并且会为源表上的每个插入、更新和删除在“数据捕获”表中附加一个新行。

我们最终从一个模板为我们需要捕获更改的每个表生成触发器,以及数据捕获表的 DDL。(我们也在附加的副本)。数据捕获表具有与源表完全相同的属性以及至少 2 个元数据属性:更改类型和时间戳。

此外,我们最终在元数据属性中添加了一个“复制时间戳”,我们可以在获取数据时填写该属性。这是必需的,因为数据可以附加到时间序列之外。换句话说,一个短事务可能会在一个长期运行的事务之前完成对数据捕获表的追加,这个事务很早就开始了,永远不会结束。

这一切可能看起来比仅仅引用 SQL Server 的“更改跟踪”要复杂一些,但它非常简单,不会对数据库的整体性能产生太大影响。由于我们添加了所有触发器,我们的测量结果产生了 3% 的影响。

于 2020-04-25T21:54:09.583 回答