之前对物化视图整理的一篇介绍:
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
物化视图有三种刷新方式:COMPLETE、FAST和FORCE:
(1)完全刷新(COMPLETE)会删除表中所有的记录(如果是单表刷新,可能会采用TRUNCATE的方式),然后根据物化视图中查询语句的定义重新生成物化视图。
(2)快速刷新(FAST)采用增量刷新的机制,只将自上次刷新以后对基表进行的所有操作刷新到物化视图中去。
(3)FORCE方式,这是默认方式。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
分享到:
相关推荐
Oracle物化视图增量刷新的应用研究.pdf
物化视图的快速刷新
Oracle物化视图创建和使用,设置物化视图的自动刷新时间
物化视图可以利用一个快速刷新机制从基础表中全部或增量刷新。在 10g 中,新的 DBMS_ADVISOR 程序包中的一个名为 TUNE_MVIEW 的过程使得这项工作变得非常容易:您利用 IN 参数来调用程序包,这构造了物化视图创建...
Oracle怎么根据物化视图日志快速刷新物化视图
ORACLE9I物化视图
包含手动刷新物化视图和自动刷新物化视图 两部分,亲自测试有效
物化视图的种类介绍和各种创建方式,刷新方式
通过逻辑备份和oracle物化视图技术,实现oracle数据库个别表的实时刷新,达到数据实时复制
物化视图在逻辑上实现与远端数据的一致性,定时刷新,使得获取数据变得不那么复杂。
oracle数据库支持物化视图–不是基于基表的虚表,而是根据表实际存在的实表,即物化视图的数据存储在非易失的存储设备上。 下面实验创建ON COMMIT 的FAST刷新模式,在mysql中用触发器实现insert , update , delete ...
【课程列表】 index 共14页.ppt ...第10章 物化视图 共38页.ppt 第11章 留下元数据线索 共32页.ppt 第12章 数据仓库实施注意事项 共18页.ppt xpp_C 使用SQL Developer 共30页.ppt xpp_D 使用SQL Plus 共34页.ppt
而原来的方案使用的物化视图的快速刷新,commit后自动刷新到物化视图,日志被清空 2、yugong中数据抽取使用的是jdbc,即extractor部分(从源库抽取数据),根据日志表中的主键列从源表获取数据;而原方案使用触发器...
说明:Oracle中需要创建用户一定是要具有dba(数据库管理员)权限的用户才能创建,而且创建的新用户不具备任何权限,连登录都不可以。 用法:create user 新用户名 identified by 密码 例子: 2. 修改密码 说明:...
创建物化视图日志 11.1.4.设置并行度 11.2.视图 11.2.1.取表记录数 11.3.物化视图 11.3.1.分析 11.3.2.取表记录数 11.3.3.刷新 11.3.4.设置并行度 11.4.数据库链接 11.4.1.测试 11.11.列 11.11.1.分析 ...
查看用户下所有主键外键引用, Windows环境中Kill掉Oracle线程(orakill),查看有哪些表被锁住,Oracle 官方文档下载,对表收集统计信息,刷新物化视图,Oracle 查看用户权限,Oracle 外连接和 (+)号的用法,多行合并一行
【课程列表】 index 共14页.ppt ...第10章 物化视图 共38页.ppt 第11章 留下元数据线索 共32页.ppt 第12章 数据仓库实施注意事项 共18页.ppt xpp_C 使用SQL Developer 共30页.ppt xpp_D 使用SQL Plus 共34页.ppt
【课程列表】 index 共14页.ppt ...第10章 物化视图 共38页.ppt 第11章 留下元数据线索 共32页.ppt 第12章 数据仓库实施注意事项 共18页.ppt xpp_C 使用SQL Developer 共30页.ppt xpp_D 使用SQL Plus 共34页.ppt
【课程列表】 index 共14页.ppt ...第10章 物化视图 共38页.ppt 第11章 留下元数据线索 共32页.ppt 第12章 数据仓库实施注意事项 共18页.ppt xpp_C 使用SQL Developer 共30页.ppt xpp_D 使用SQL Plus 共34页.ppt