【发布时间】:2010-11-01 04:59:05
【问题描述】:
我们即将进行并行测试,以将旧系统与新的闪亮版本进行比较。我们有一个 Oracle 数据库表 A,它存储旧系统的数据,以及一个等效的表 B,它存储新系统的数据,因此在测试期间,数据库是非规范化的。 (另外,遗留系统和表 A 是固定的 - 不允许更改)
我想要做的是允许 A 上不常见的 DML 操作传播到 B,反之亦然。我开始使用一对触发器来执行此操作,但遇到了一个明显的问题,即当触发器运行时,表正在发生变化,并引发异常。
是否有处理此问题的标准方法?我已经阅读了关于使用 dbms_scheduler 是否可行的不同报告...
谢谢,
安迪
更新: 我最终退出了整个问题,并确保所有更新 A 的存储过程也更新 B,反之亦然。
我已将 Quassnoi 的回答标记为已接受,因为如果将来遇到同样的问题,我会听从他的建议。
我已经标记了 JosephStyon 的答案,因为我通过在表 A 和 B 上添加两个插入/更新语句级触发器,然后根据哪个触发器使用 A 或 B 作为主表来执行他的合并过程,从而使事情变得简单运行(尽管首先我检查了目标表是否会被合并更改,如果没有则提前退出)。
【问题讨论】:
-
@Andy:如果您的遗留应用程序使用存储过程来更新表,那么看在上帝的份上,只需将您的逻辑放入过程中,因为它应该是这样的。我的建议仅适用于开发不佳的应用程序,它们发出 DML 语句(而不是调用过程)来更新数据。
标签: sql oracle synchronization triggers denormalization