0

我使用如下语法在远程数据库中创建了一个快速刷新 MV:

CREATE MATERIALIZED VIEW  MV_TAB1 
REFRESH FAST WITH PRIMARY KEY 
START WITH SYSDATE NEXT SYSDATE+(5/1440) /* 5 MINUTES */ 
FOR UPDATE AS 
SELECT * FROM TAB1@SOURCE_DB;

现在在MV_TAB1创建的远程数据库中,是否可以更新MV_TAB1并在刷新后保持更新?我的测试表明,每次刷新后,我的更新MV_TAB1都消失了。有没有办法保持这个本地更新?如果是,如何?

谢谢,阿莫斯

4

1 回答 1

0

MV_TAB1 是 TAB1@SOURCE_DB 的镜像,所以你不能像 TAB1 一样同时拥有它而与 TAB1 不同。

如果您更新目标表上的某些行,然后在源中更新它们,则刷新将覆盖它们。如果您不在源中更新它们,只有在您使用快速刷新时它们才会保持更新。刷新完成将删除/截断远程表并重新插入所有行。

更新:如果您希望远程表上的更新优先于刷新,您可以使用一些技巧:

1) 保持 MV 不变,并在具有相同 DDL的姊妹表上进行更新(和插入) 。查询而不是 MV,将使用这两个表,例如:

select nvl(a.key, b.key), decode(a.key, null, b.col, a.col)
from tab1_sister a 
full join mv_tab1 b on (a.key = b.key);

2)将列添加到 MV_TAB1(复制它们,除了键)并对这些列进行更新(MV 可能必须与预建表一起使用)。如果附加列完成,则使用它们,否则使用刷新更新的原始列。

于 2013-01-03T06:52:14.083 回答