oracle 物化视图及创建索引

物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有实质上的好处。

1、物化视图的类型:ON DEMAND、ON COMMIT

二者的区别在于刷新方法的不同,ON DEMAND顾名思义,仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;而ON COMMIT是说,一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。
2、ON DEMAND物化视图

物化视图的创建本身是很复杂和需要优化参数设置的,特别是针对大型生产数据库系统而言。但Oracle允许以这种最简单的,类似于普通视图的方式来做,所以不可避免的会涉及到默认值问题。也就是说Oracle给物化视图的重要定义参数的默认值处理是我们需要特别注意的。

物化视图的特点:

(1) 物化视图在某种意义上说就是一个物理表(而且不仅仅是一个物理表),这通过其可以被user_tables查询出来,而得到佐证;

(2) 物化视图也是一种段(segment),所以其有自己的物理存储属性;

(3) 物化视图会占用数据库磁盘空间,这点从user_segment的查询结果,可以得到佐证;

创建语句:create materialized view mv_name as select * from table_name    默认情况下,如果没指定刷新方法和刷新模式,则Oracle默认为FORCE和DEMAND。
    物化视图的数据怎么随着基表而更新?    Oracle提供了两种方式,手工刷新和自动刷新,默认为手工刷新。也就是说,通过我们手工的执行某个Oracle提供的系统级存储过程或包,来保证物化视图与基表数据一致性。这是最基本的刷新办法了。自动刷新,其实也就是Oracle会建立一个job,通过这个job来调用相同的存储过程或包,加以实现。

ON DEMAND物化视图的特性及其和ON COMMIT物化视图的区别,即前者不刷新(手工或自动)就不更新物化视图,而后者不刷新也会更新物化视图,——只要基表发生了COMMIT。

创建定时刷新的物化视图:create materialized view mv_name refresh force on demand start with sysdate next sysdate+1 (指定物化视图每天刷新一次)

上述创建的物化视图每天刷新,但是没有指定刷新时间,如果要指定刷新时间(比如每天晚上10:00定时刷新一次):create materialized view mv_name refresh force on demand start with sysdate next to_date( concat( to_char( sysdate+1,‘dd-mm-yyyy‘),‘ 22:00:00‘),‘dd-mm-yyyy hh24:mi:ss‘)
3、ON COMMIT物化视图

ON COMMIT物化视图的创建,和上面创建ON DEMAND的物化视图区别不大。因为ON DEMAND是默认的,所以ON COMMIT物化视图,需要再增加个参数即可。   需要注意的是,无法在定义时仅指定ON COMMIT,还得附带个参数才行。

创建ON COMMIT物化视图:create materialized view mv_name refresh force on commit as select * from table_name    备注:实际创建过程中,基表需要有主键约束,否则会报错(ORA-12014)

4、物化视图的刷新

刷新(Refresh):指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。刷新的模式有两种:ON DEMAND和ON COMMIT。(如上所述)

刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER。FAST刷新采用增量刷新,只刷新自上次刷新以后进行的修改。COMPLETE刷新对整个物化视图进行完全的刷新。如果选择FORCE方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式。NEVER指物化视图不进行任何刷新。

对于已经创建好的物化视图,可以修改其刷新方式,比如把物化视图mv_name的刷新方式修改为每天晚上10点刷新一次:alter materialized view mv_name refresh force on demand start with sysdate next to_date(concat(to_char(sysdate+1,‘dd-mm-yyyy‘),‘ 22:00:00‘),‘dd-mm-yyyy hh24:mi:ss‘)    
5、物化视图具有表一样的特征,所以可以像对表一样,我们可以为它创建索引,创建方法和对表一样。
6、物化视图的删除:

虽然物化视图是和表一起管理的,但是在经常使用的PLSQL工具中,并不能用删除表的方式来删除(在表上右键选择‘drop’并不能删除物化视图),可以使用语句来实现:drop materialized view mv_name

物化视图创建参数

(1)BUILD BUILD IMMEDIATE 是在创建物化视图的时候就生成数据 BUILD DEFERRED 则在创建时不生成数据,以后根据需要再生成数据。 默认为BUILD IMMEDIATE。
(2)REFRESH FAST 增量刷新用物化视图日志,来发送主表已经修改的数据行到物化视图中。 COMPLETE 完全刷新重新生成整个视图,如果请求完全刷新,oracle会完成完全刷新即使增量刷新可用。 FORCE 如果增量刷新可用Oracle将完成增量刷新,否则将完成完全刷新,如果不指定刷新方法(FAST, COMPLETE, or FORCE)。 默认选项是Force。
(3)ON ON DEMAND 指物化视图在用户需要的时候进行刷新。 ON COMMIT 指出物化视图在对基表的DML操作提交的同时进行刷新。 默认是ON DEMAND.
(4)START WITH 通知数据库完成从主表到本地表第一次复制的时间。
(5)NEXT 说明了刷新的时间间隔 根据下一次刷新的时间=上一次执行完成的时间+时间间隔。 为了保证在用户需要的时间点刷新,一般使用TRUNC()命令对时间取整到天数,然后加上时间。

使用心得:

使用TOAD创建物化视图索引时出现ORA-01450 :XXX超长

琢磨了一会 发现是创建索引时只能加一个字段,同时加多个字段到这个索引时就报这个错

时间: 2024-10-10 17:59:14

oracle 物化视图及创建索引的相关文章

Oracle 物化视图 说明

一.    物化视图概述 Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表.物化视图存储基于远程表的数据,也可以称为快照. 物化视图可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果.物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能:物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性:物化视图需要占用存储

oracle物化视图创建

我们如果遇到需要从其它系统的数据库中取数据进行统计分析的问题,可疑选择使用ORACLE的ODI工具进行抽数,但是对方提供的数据库用户下没有任何对象,只是有查询所有表的权限,因此无法做数据反向. 于是决定使用物化视图,把对方数据库中的数据拿过来,虽然数据量比较大,但是每月只拿一次,而且如果设置成增量更新,也不会太慢.现在记录下物化视图的创建过程(以一张表为例). 一.准备条件以及备注 假设双方数据库都是ORACLE10g,需要同步过来的表名叫:GG_ZLX_ZHU,对方数据库用户名:usernam

oracle物化视图

原文URL: oracle 10g物化视图简介 2012-05-09 17:33:55|  分类: ORACLE性能 |  标签:oracle  物化视图  |举报|字号 订阅 下载LOFTER我的照片书  | 环境oracle 10g 10.2.0.4  linux 64 要大而专业的看oracle自己的文档-sql参考. 说实话,oracle需要学习的内容太多,每个都看过去,实在太费事. 所以如果能够对物化视图有个概览,那最方便不过. 主要涉及内容 物化视图日志,用于快速刷新所必须的 物化视

ORACLE物化视图详解

一.物化的一般用法物化视图是一种特殊的物理表,"物化"(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,oracle都实际上转换为视图SQL语句的查询.这样对整体查询性能的提高,并没有实质上的好处. 1.物化视图的类型ON DEMAND.ON COMMIT.二者的区别在于刷新方法的不同,ON DEMAND顾名思义,仅在该物化视图"需要"被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一

SQL Server索引视图以(物化视图)及索引视图与查询重写

经常听Oracle的同学说起来物化视图,物化视图的作用之一就是可以实现查询重写,听起来有一种高大上的感觉, SQL Server也有类似于Oracle物化视图的功能,只不过叫做索引视图. 说实话,还是物化视图听起来比较合适,与普通视图比,物化视图就是直接将数据存储起来了 SQL Server中的索引视图也具有查询重写的功能, 所谓的查询重写,就是如果符合条件的数据在索引视图上,并且查询列都包含在在索引视图上,此时可以直接通过查询索引视图来替代基于原始表的查询 依旧惯例,先上代码做一个测试环境 -

oracle 物化视图

我们如果遇到需要从其它系统的数据库中取数据进行统计分析的问题,可疑选择使用ORACLE的ODI工具进行抽数,但是对方提供的数据库用户下没有任何对象,只是有查询所有表的权限,因此无法做数据反向. 于是决定使用物化视图,把对方数据库中的数据拿过来,虽然数据量比较大,但是每月只拿一次,而且如果设置成增量更新,也不会太慢.现在记录下物化视图的创建过程(以一张表为例). 一.准备条件以及备注 假设双方数据库都是ORACLE10g,需要同步过来的表名叫:GG_ZLX_ZHU,对方数据库用户名:usernam

解决oracle 物化视图刷新失败

oracle 物化视图刷新失败可能原因: 1.视图未建立物化视图日志 2.基表为授权给用户 1.物化视图语法 create materialized view [view_name] refresh [fast|complete|force] [ on [commit|demand] | start with (start_time) next (next_time) ] as {创建物化视图用的查询语句} 以上是Oracle创建物化视图(Materialized View,以下简称MV)时的常

Oracle物化视图梳理

DECLARE--物化视图可以分为三种类型: * 包含聚集的物化视图 * 只包含连接的物化视图 * 嵌套物化视图 三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大. --物化视图创建方式(Build Methods),包括BUILD IMMEDIATE和BUILD DEFERRED两种. * BUILD IMMEDIATE是在创建物化视图的时候就生成数据, * BUILD DEFERRED则在创建时不生成数据,以后根据需要在生成数据. 默认为BUILD IMMEDIATE.

[O]ORACLE物化视图的使用

用于数据复制的物化视图 物化视图的一个主要功能就是用于数据的复制,Oracle推出的高级复制功能分为两个部分,多主复制和物化视图复制.而物化视图复制就是利用了物化视图的功能. 物化视图复制包含只读物化视图复制.可更新物化视图复制和可写物化视图复制. 1.只读物化视图复制建立的是源数据库的只读环境. 2.可更新物化视图复制建立基于物化视图双向复制环境. 3.可写物化视图复制在物化视图建立的时候使用了FOR UPDATE,但是没有像可更新物化视图那样添加到物化视图组中,因此本地物化视图可以修改,但是