我使用如下语法在远程数据库中创建了一个快速刷新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上的更新都会消失。有没有办法保持这个本地更新?如果是,是如何实现的?
谢谢,阿莫斯
发布于 2013-01-03 14:52:14
MV_TAB1是TAB1@SOURCE_DB的镜像,所以你不能像TAB1和TAB1一样同时拥有它。
如果在目标表上更新一些行,然后在源中更新它们,则刷新将覆盖这些行。如果你不在源代码中更新它们,只有在你使用快速刷新的情况下,它们才会保持更新。刷新完成将删除/截断远程表,并重新插入所有行。
UPDATE:如果您希望远程表上的更新优先于刷新,您可以使用一些技巧:
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可能必须具有预构建表)。如果其他列已完成,请使用它们,否则使用通过刷新更新的原始列。
https://stackoverflow.com/questions/14133398
复制相似问题