我在Oracle 11g上有一个数据库,其中有一个由外部用户更新的表。现在,我想捕捉这个表上的插入/更新/删除,以便在另一个数据库的表上进行这些更改,我正在尝试不同的研究方法。我测试了轮询(一项每分钟检查表上是否有更新、插入或删除的工作)和触发器(在表上触发更新、插入和删除),那么有其他方法吗?
我发现了AOQ(Oracle高级队列)、DBMS_PIPE、Oracle SNMP代理集成器轮询活动,但我不知道它们是否适合这种情况。。。
这取决于情况。
根据所涉及的数据量和插入/更新/删除的频率,通常只需要轮询或触发器。
例如,轮询方法可能很简单,只需添加一列,默认情况下该列设置为1,当复制代码"消耗"行时,该列将更新为NULL。如果更新了一行,则表上的触发器会将其设置回1。该列上的索引将是轻量级的(该索引只包括列为1的行的条目),因此查询速度很快。不过,您需要另一个表来处理删除。
触发器方法只会将insert/update/delete行写入某种类型的日志表中,然后作业会定期清除这些行。
对于较重的卷,解决方案包括Oracle GoldenGate和Oracle Streams:http://www.oracle.com/technetwork/database/focus-areas/data-integration/index.html