在Oracle中保持表同步

And*_*ndy 6 sql oracle synchronization triggers denormalization

我们即将进行并排测试,以将遗留系统与新的闪亮版本进行比较.我们有一个Oracle数据库表A,用于存储遗留系统的数据,以及一个等效表B,用于存储新系统的数据,因此在测试期间,数据库是非规范化的.(此外,遗留系统和表A是固定的 - 不允许更改)

我想要做的是允许A上不频繁的DML操作传播到B,反之亦然.我开始使用一对触发器来执行此操作,但遇到了一个明显的问题,即当触发器运行时,表正在发生变化,并抛出异常.

有没有一种标准的方法来处理这个问题?我已经阅读了关于是否使用dbms_scheduler的不同报告......

谢谢,

安迪

更新: 我最终摆脱了整个问题并确保更新A的所有存储过程也更新B,反之亦然.

我已经将Quassnoi的答案标记为已被接受,因为如果将来遇到同样的问题我会遵循他的建议.

我已经标记了JosephStyon的答案,因为我简单地通过在表A和B上添加两个插入/更新语句级别触发器来完成工作,然后使用A或B作为主表执行其合并过程,具体取决于运行的触发器(尽管首先,我检查了目标表是否会被合并更改,如果没有,则会收到.

Qua*_*noi 3

我将创建AB作为单个规范化(或非规范化)表的视图,并INSTEAD OF在这些视图上创建触发器来处理DML操作。

如果查询计划很重要,最好保留表的两个副本:A_underlyingB_underlying创建视图,如下所示:

CREATE VIEW A
AS
SELECT  *
FROM    A_underlying

CREATE VIEW B
AS
SELECT  *
FROM    B_underlying
Run Code Online (Sandbox Code Playgroud)

谓词将被推送到视图中,并且实际表和视图的查询计划将是相同的。

INSTEAD OF两个视图上的触发器中,您应该将数据放入两个基础表中。