我们需要知道自从上次从TeraData数据库导入数据后,该数据库中的哪些行发生了变化。关于TeraData数据库中的表或表中的数据,没有任何东西可以证明是一个可靠的变化信号,我们可以用来确定这一点。在SQL Server中,似乎 变动跟踪 的功能正是我们所需要的,但是源系统是TeraData。有谁知道在TeraData中是否有一个功能,或者一个与TeraData一起工作的第三方工具,可以有效地增加SQL Server变更跟踪所提供的功能,但是要在TeraData数据库中使用?
Teradata是一个OLAP数据库。 你所提到的Sql Server中的功能也是针对OLTP类型的处理。 Teradata是假设你将执行大型的集合操作,而不是小型的单行级操作。 Teradata的一切优化器和功能集都是基于为那些大集操作产生性能。
我们设法跟踪Teradata数据库内变化的唯一方法是。
我们已经为包括Oracle和Teradata在内的各种源数据库完成了这项工作。 触发器相当简单,对于源表的每次插入、更新和删除,都会给 "数据捕获 "表添加一条新的记录。
我们最终从我们需要捕获变化的每个表的模板中生成了触发器,以及数据捕获表的DDL。(我们也在追加的副本)。数据捕获表的属性与源表完全相同,另外还有至少两个元数据属性。变更类型,和一个时间戳。
此外,我们最终在元数据属性中添加了一个 "复制时间戳",我们可以在采集数据时填写。 之所以需要这样做,是因为数据可以不按时间顺序追加。 换句话说,一个短的事务可能会在一个长期运行的事务,很早开始的事务完成之前,就完成了对数据采集表的追加。
这一切可能看起来比仅仅引用SQL Servers的 "变化跟踪 "要复杂一些,但它很简单,对数据库的整体性能影响不大。 我们的测量结果是3%的影响,因为我们添加了所有的触发器。