算上一篇(http://blog.itpub.net/post/334/15305)的续篇
对于物化视图(Materialized View)的完全刷新,如果将物化视图加入到表中,则刷新时能用delete替代truncate。这样在刷新失败时能够回滚。
但是采用物化视图组(Materialized View Group)刷新时,要考虑一些约束。
[@more@]1. 对undo表空间的需求。delete替代truncate,必然产生大量undo信息,所以要考虑使undo tablespace足够大
2. 如果一个物化视图组(Materialized View Group)只包括一个物化视图(Materialized View),则仍然采用truncate方式刷新,失败时无法回滚。
(这部分测试过程略)
3. 如果将多个物化视图加入到一个组中,则对undo tablespace会有更高要求。从这点考虑,建立一个小的物化视图,用这个小的物化视图和要刷新的视图去组成一个组。然后再用dbms_refresh.refresh过程去刷新
SQL> create materialized view eden_dummy as select * from dual;
SQL> exec dbms_refresh.make(name => 'eden_group',list => 'eden_dummy, eden_cstm_mv',next_date => sysdate,interval => 'sysdate + 1/24', implicit_destroy => true);
dba_refresh_children:物化视图和组的关系信息
dba_refresh:组的信息
关于物化视图组(Materialized View Group)的信息,可以参考字典
SQL>exec dbms_refresh.refresh('EDEN_GROUP');