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