li
  当前位置:主页 > 性能优化 > 文章内容
li
物化视图复制快速刷新的限制(二)
来源: http://yangtingkun.itpub.net/  作者: yangtingkun    时间:2008-01-26   阅读:25  

Oracle的物化视图复制的使用范围比较广,但是Oracle的官方文档中却很少建议将物化视图的复制用作数据仓库的数据抽取。

物化视图复制快速刷新的限制(一):http://yangtingkun.itpub.net/post/468/207875


Oracle中,复制物化视图作为预计算物化视图的基表是不支持快速刷新的。但是,复制物化视图作为复制物化视图的基表是可以快速刷新的。多级的物化视图复制就是利用了这个特性。在我曾经做过的例子中,只读物化视图复制达到了4层,仍然可以快速刷新。

预计算物化视图不能基于复制物化视图建立快速刷新,那么,能否直接对远端基表建立快速刷新的物化视图呢?

看下面的例子,这个例子的代码就建立在上面一章例子的基础之上。环境的搭建就不重复了,参考上一篇文章。

SQL> CONN TEST/TEST@TEST2已连接。
SQL> DROP MATERIALIZED VIEW MV_FACT;

实体化视图已删除。

SQL> CREATE MATERIALIZED VIEW MV_FACT REFRESH FAST AS
2 SELECT F.ROWID F_ROWID, A.ROWID A_ROWID, B.ROWID B_ROWID, F.ID,
3 A.NAME A_NAME, B.NAME B_NAME, NUM
4 FROM FACT@YTK.YANGTINGKUN F, DIM_A@YTK.YANGTINGKUN A, DIM_B@YTK.YANGTINGKUN B
5 WHERE F.AID = A.ID
6 AND F.BID = B.ID;
AND F.BID = B.ID
*
6 行出现错误:
ORA-12015: cannot create a fast refresh materialized view from a complex query


SQL> TRUNCATE TABLE MV_CAPABILITIES_TABLE;

表被截断。

SQL> BEGIN
2 DBMS_MVIEW.EXPLAIN_MVIEW('SELECT F.ROWID F_ROWID, A.ROWID A_ROWID, B.ROWID B_ROWID, F.ID,
3 A.NAME A_NAME, B.NAME B_NAME, NUM
4 FROM FACT@YTK.YANGTINGKUN F, DIM_A@YTK.YANGTINGKUN A, DIM_B@YTK.YANGTINGKUN B
5 WHERE F.AID = A.ID
6 AND F.BID = B.ID');
7 END;
8 /

PL/SQL 过程已成功完成。

SQL> COL MSGTXT FORMAT A72SQL> SELECT CAPABILITY_NAME, POSSIBLE, MSGTXT
2 FROM MV_CAPABILITIES_TABLE
3 WHERE CAPABILITY_NAME LIKE 'REFRESH%';

CAPABILITY_NAME P MSGTXT
------------------------------ - ------------------------------------------------------
REFRESH_COMPLETE Y
REFRESH_FAST N
REFRESH_FAST_AFTER_INSERT N mv references a remote table or view in the FROM list
REFRESH_FAST_AFTER_INSERT N one or more joins present in mv
REFRESH_FAST_AFTER_ONETAB_DML N see the reason why REFRESH_FAST_AFTER_INSERT is disabled
REFRESH_FAST_AFTER_ANY_DML N see the reason why REFRESH_FAST_AFTER_ONETAB_DML is disabled

已选择6行。

这次的错误信息也很明显,对于预计算的物化视图,基表是不能包括远端表的。

IXDBA.NET技术社区

那么就没有任何办法将预计算的物化视图快速刷新到远端了吗?也并不是没有办法,但是这个方法与建立预计算的初衷可能并不一致。那就是,在基表所在数据库建立快速刷新的预计算物化视图,在利用物化视图复制将预计算物化视图复制到远端数据库。

SQL> CONN YANGTK/YANGTK@YTK已连接。
SQL> DROP MATERIALIZED VIEW MV_FACT;

实体化视图已删除。

SQL> CREATE MATERIALIZED VIEW MV_FACT REFRESH FAST AS
2 SELECT F.ROWID F_ROWID, A.ROWID A_ROWID, B.ROWID B_ROWID, F.ID,
3 A.NAME A_NAME, B.NAME B_NAME, NUM
4 FROM FACT F, DIM_A A, DIM_B B
5 WHERE F.AID = A.ID
6 AND F.BID = B.ID;

实体化视图已创建。

SQL> ALTER TABLE MV_FACT ADD PRIMARY KEY (F_ROWID, A_ROWID, B_ROWID);

表已更改。

SQL> CREATE MATERIALIZED VIEW LOG ON MV_FACT;

实体化视图日志已创建。

SQL> CONN TEST/TEST@TEST2已连接。
SQL> CREATE MATERIALIZED VIEW MV_MV_FACT REFRESH FAST AS
2 SELECT * FROM MV_FACT@YTK.YANGTINGKUN;

实体化视图已创建。

使用这个方法的缺点是大部分的工作量全部有基表所在站点承担,除了物化视图日志增加的负载,还包括了建立、刷新大量的预计算物化视图的负载,以及预计算物化视图日志的负载,而对于基表站点本身来说,预计算物化视图是没有实际的作用的。不过,这种方法毕竟解决了预计算物化视图不能快速刷新到远端站点的问题。如果基表所在数据库的负载较轻的话,是可以考虑这个方案的。




  上一篇: 物化视图是否根据字段进行刷新(...   下一篇: GLOBAL_NAME相同的数据库中物化视...
li
 §相关评论  
 热点文章

·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 编辑推荐
·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 相关篇章
·物化视图是否根据字段进行刷新(...
·物化视图是否根据字段进行刷新(...
·物化视图是否根据字段进行刷新(...
·在包含LONG类型的表上建立物化视...
·物化视图注册信息的清除
·建立物化视图所需权限(四)
·建立物化视图所需权限(三)
·建立物化视图所需权限(二)
·建立物化视图所需权限(一)
·两个导致物化视图无法快速刷新的...
·GLOBAL_NAME相同的数据库中物化视...
·GLOBAL_NAME相同的数据库中物化视...
·ORA-600(999)错误(二)
·物化视图刷新过程中出现的约束冲...
·ORA-600(999)错误(三)
·建立物化视图导致数据库实例崩溃
·小议物化视图与基表数据不一致的...
·物化视图的创建写法与刷新问题
·10203设置CURSOR_SHARING为SIMIL...
·小议物化视图与基表数据不一致的...
 
li
设为首页 | 关于我们 | 技术服务 | 收藏本站 | 网站地图 | 联系方式 | 本站友情连接