我们即将运行并行测试,以将旧版系统与新版本进行比较。我们有一个存储遗留系统数据的Oracle数据库表A和一个存储新系统数据的等效表B,所以在测试期间数据库是非规范化的。 (另外,遗留系统和表A是固定的 - 不允许更改)在Oracle中保持表的同步
我想要做的就是让A上不经常的DML操作传播到B,反之亦然。我从一对触发器开始执行此操作,但触发了一个显而易见的问题,即触发器运行时,表格会发生变化,并引发异常。
有没有处理这个问题的标准方法?我读过关于使用DBMS_SCHEDULER是否是要走的路不同的报告...
感谢,
安迪
更新: 我已经结束了chickening出了整个的问题并确保更新A的所有存储过程也更新B,反之亦然。
我标志着Quassnoi的答案接受,因为我按照他的建议,如果面临着在未来同样的问题。
我已经标记了JosephStyon的答案,因为我简单地通过在表A和B上添加两个插入/更新语句级触发器,然后使用A或B作为主表进行合并,这取决于哪个触发器运行(虽然首先我检查了目标表将被合并更改,如果没有提前出现)。
@Andy:如果你的遗留应用程序使用存储过程来更新表,那么为了上帝的缘故,你只需把你的逻辑放入过程中,因为它应该是这样。我的建议只适用于发布DML语句的较差的应用程序(而不是调用过程)来更新数据。 – Quassnoi 2009-06-08 19:49:26