我使用如下语法在远程数据库中创建了一个快速刷新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
上的更新都消失了。有没有办法保持本地更新?如果有,怎么样?
谢谢, 摩
答案 0 :(得分:0)
MV_TAB1是TAB1 @ SOURCE_DB的图像,因此您不能像TAB1那样在同一时间使用它,也不能与TAB1不同。
如果更新目标表上的某些行,然后在源中更新它们,则刷新将覆盖它们。如果你不在源代码中更新它们,它们将仅在你快速使用刷新时保持更新。刷新完成将删除/截断远程表并重新插入所有行。
更新:如果您希望远程表上的更新优先于刷新,您可以使用一些技巧:
1)保持MV不变,并使用相同的DDL对 sister 表进行更新(和插入)。查询而不是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可能必须与预构建的表一起使用)。如果完成了其他列,请使用它们,否则使用刷新更新的原始列。