设为首页 收藏本站
查看: 1345|回复: 0

[经验分享] Oracle 物化视图 快速刷新 限制 说明

[复制链接]

尚未签到

发表于 2016-7-26 11:58:14 | 显示全部楼层 |阅读模式
  

  
  
  之前对物化视图整理的一篇介绍:
  http://blog.csdn.net/tianlesoftware/article/details/4713553
  
  在老杨的Blog 看到一些列的说明,整理并转载过来,原文链接如下:
  
  物化视图的快速刷新(一)
  http://yangtingkun.itpub.net/post/468/14245
  
  物化视图的快速刷新(二)
  http://yangtingkun.itpub.net/post/468/16456
  
  物化视图的快速刷新(三)
  http://yangtingkun.itpub.net/post/468/16496
  
  
  物化视图有三种刷新方式:COMPLETEFASTFORCE:
  1)完全刷新(COMPLETE会删除表中所有的记录(如果是单表刷新,可能会采用TRUNCATE的方式),然后根据物化视图中查询语句的定义重新生成物化视图。
  2)快速刷新(FAST采用增量刷新的机制,只将自上次刷新以后对基表进行的所有操作刷新到物化视图中去。
  3FORCE方式,这是默认方式。Oracle会自动判断是否满足快速刷新的条件,如果满足则进行快速刷新,否则进行完全刷新。
  
  显然快速刷新是物化视图刷新方式的首选。但是,不是所有的物化视图都可以进行快速刷新,只有满足某些条件的物化视图才具有快速刷新的能力。
  
  根据查询的不同,快速刷新的限制条件也不相同,下面总结一下不同类型的物化视图对快速刷新的限制条件。
  
补充:
  老杨说的这些限时是基于Oracle 9i的版本,随着Oracle 版本的升级,这些限制也放的越来越宽。
  
  
一.所有类型的快速刷新物化视图都必须满足的条件
  1.物化视图不能包含对不重复表达式的引用,如SYSDATE和ROWNUM;
  2.物化视图不能包含对LONG和LONG RAW数据类型的引用。
  
二.只包含连接的物化视图
  1.必须满足所有快速刷新物化视图都满足的条件;
  2.不能包括GROUP BY语句或聚集操作;
  3.如果在WHERE语句中包含外连接,那么唯一约束必须存在于连接中内表的连接列上;
  4.如果不包含外连接,那么WHERE语句没有限制,如果包含外连接,那么WHERE语句中只能使用AND连接,并且只能使用“=”操作。
  5.FROM语句列表中所有表的ROWID必须出现在SELECT语句的列表中。
  6.FROM语句列表中的所有表必须建立基于ROWID类型的物化视图日志。
  
  
三.包含聚集的物化视图
  1.必须满足所有快速刷新物化视图都满足的条件;
  2.物化视图查询的所有表必须建立物化视图日志,且物化视图日志必须满足下列限制:
  (1)包含物化视图查询语句中的所有列,包括SELECT列表中的列和WHERE语句中的列;
  (2)必须指明ROWID和INCLUDING NEW VALUES;
  (3)如果对基本的操作同时包括INSERT、UPDATE和DELETE操作(即不是只包含INSERT操作),那么物化视图日志应该包括SEQUENCE。
  
  3.允许的聚集函数包括:SUM、COUNT、AVG、STDDEV、VARIANCE、MIN和MAX;
  
  4.必须指定COUNT(*);
  不加COUNT(*),建立快速刷新的物化视图会成功,但通过执行EXPLAIN_MVIEW过程,可以发现, COUNT(*)对于INSERT操作是可以快速刷新的,不过对于UPDATE和DELETE则会造成快速刷新的失败。
  
  5.如果指明了除COUNT之外的聚集函数,则COUNT(expr)也必须存在;
  比如:包含SUM(a),则必须同时包含COUNT(a)。
  
  6.如果指明了VARIANCE(expr)或STDDEV(expr),除了COUNT(expr)外,SUM(expr)也必须指明;
  Oracle推荐同时包括SUM(expr*expr)。
  
  7.SELECT列表中必须包括所有的GROUP BY列;
  
  8.当物化视图属于下面的某种情况,则快速刷新只支持常规DML插入和直接装载,这种类型的物化视图又称为INSERT-ONLY物化视图;
  物化视图包含MIN或MAX聚集函数;
  物化视图包含SUM(expr),但是没有包括COUNT(expr);
  物化视图没有包含COUNT(*)。
  
  注意:如果建立了这种物化视图且刷新机制是ON COMMIT的,则会存在潜在的问题。当出现了UPDATE或DELETE语句,除非手工完全刷新解决这个问题,否则物化视图至此以后都不再自动刷新,且不会报任何错误。
  
  9.如果包含inline views、outer joins、self joins或grouping set,则兼容性的设置必须在9.0以上;
  
  10.如果物化视图建立在视图或子查询上,则要求视图必须可以完全合并的。
  
  11.如果没有外连接,则对WHERE语句没有限制。如果包含外连接,则要求WHERE语句只能包括AND连接和“=”操作。对于包含外连接的聚集物化视图,快速刷新支持outer表的修改。且inter表的连接列上必须存在唯一约束。
  
  12.对于包含了ROLLUP、CUBE、GROUPING SET的物化视图必须满足下列限制条件:
  SELECT语句列表中应该包含GROUPING标识符:可以是GROUP BY表达式中所有列的GROUPING_ID函数,也可以是GROUP BY表达式中每一列的GROUPING函数;
  
  例如:GROUP BY语句为:GROUP BY CUBE(a, b),则SELECT列表应该包括GROUPING_ID(a, b)或者GROUPING(a)和GROUPING(b)。
  
  GROUP BY不能产生重复的GROUPING。
  比如:GROUP BY a,ROLLUP(a, b)则不支持快速刷新,因为包含了重复的GROUPING:(a), (a, b), (a)。
  
四.包含UNION ALL的物化视图
  1.UNION ALL操作必须在查询的顶层。可以有一种情况例外:UNION ALL在第二层,而第一层的查询语句为SELECT * FROM;
  2.被UNION ALL操作连接在一起的每个查询块都应该满足快速刷新的限制条件;
  3.SELECT列表中必须包含一列维护列,叫做UNION ALL标识符,每个UNION ALL分支的标识符列应包含不同的常量值;
  4.不支持外连接、远端数据库表和包括只允许插入的聚集物化视图定义查询;
  5.不支持基于分区改变跟踪(PCT)的刷新;
  6.兼容性设置应设置为9.2.0。
  
五.嵌套物化视图
  嵌套物化视图的每层都必须满足快速刷新的限制条件;
  对于同时包含聚集和连接的嵌套物化视图,不支持ON COMMIT的快速刷新。
  
  
  
  
  
  
  -------------------------------------------------------------------------------------------------------
  Skype:  tianlesoftware
  QQ: tianlesoftware@gmail.com
  Email:  tianlesoftware@gmail.com
  Blog: http://www.tianlesoftware.com
  Weibo:  http://weibo.com/tianlesoftware
  Twitter: http://twitter.com/tianlesoftware
  Facebook: http://www.facebook.com/tianlesoftware
  Linkedin: http://cn.linkedin.com/in/tianlesoftware
  
  
  -------加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请----
  DBA1 群:62697716(满); DBA2 群:62697977(满)DBA3 群:62697850(满)
  DBA 超级群:63306533(满); DBA4 群:83829929 DBA5群: 142216823
  DBA6 群:158654907 DBA7 群:172855474 DBA总群:104207940

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-249670-1-1.html 上篇帖子: Oracle ROWID 方式访问数据库 下篇帖子: 探索ORACLE之RMAN_05增量备份
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表