Oracle的物化视图是包括一个查询结果的数据库对象,它是远程数据的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照

materializedview(MV)是自动刷新或者手动刷新的,View不用刷新 MV也可以直接update,但是不影响base table,对View的update反映到base table上 MV主要用于远程数据访问,mv中的数据需要占用磁盘空间,view中不保存数据

 物化视图可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。物化视图有很多方面和索引很相似;使用物化视图的目的是为了提高查询性能;物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。


物化视图可以查询表,视图和其它的物化视图。


通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。

对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。

对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。

物化视图由于是物理真实存在的,故可以创建索引。

实例:

1.创建物化视图需要授权:

GRANT CREATE MATERIALIZED VIEW TO USER_NAME;

2.授权给中间用户 

GRANT SELECT ON DAVE TO ANQING;  

GRANT SELECT ON MLOG$_DAVE TO ANQING;  


3.创建MATERIALIZED VIEW

CREATE MATERIALIZED VIEW AICS_DAVE  

TABLESPACE&BISONCS_SPACE  

REFRESH FAST  



--1.  完全刷新(COMPLETE)会删除表中所有的记录(如果是单表刷新,可能会采用TRUNCATE的方式),然后根据物化图

--中查询语句的定义重新生成物化视图。2. 快速刷新(FAST)采用增量刷新的机制,只将自上次刷新以后对基表进行的所有操

--作刷新到物化视图中去。FAST必须创建基于主表的视图日志。 对于增量刷新选项,如果在子查询中存在分析函数,则物化视

--图不起作用。3) 采用FORCE方式,Oracle会自动判断是否满足快速刷新的条件,如果满足则进行快速刷新,否则进行完全刷

--新。


ON DEMAND  



--1.  ON DEMAND(默认) 物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷

--新,也可以通过JOB定时进行刷新;2.  ON COMMIT物化视图在对基表的DML操作提交的同时进行刷新


START WITH SYSDATE  


--第一次刷新时间  

--START WITH to_date('2012-01-01 20:00:00', 'yyyy-mm-dd hh24:mi:ss')  


NEXT TRUNC(SYSDATE,'dd')+1+2/24  


-- 刷新时间间隔。每 1 天刷新一次,时间为凌晨 2 点   

WITH PRIMARY KEY  


--USING DEFAULT LOCAL ROLLBACKSEGMENT  


DISABLE QUERY REWRITE AS  

SELECT MODEL_ID, STATUS,MODEL_NAME, MANU_ID, DESCRIPTION, CREATE_TIME, UPDATE_TIME, SW_VERSION  

FROM AICS_DAVE@A;  

4. 创建索引 

CREATE INDEX IDX_T_DV_CT  ON AICS_DEV_INFO (CREATE_TIME, UPDATE_TIME)  TABLESPACE&BISON_IDX;

5. 物化视图刷新

EXEC DBMS_MVIEW.REFRESH('MV_DAVE');  


 --完全刷新  


EXEC DBMS_MVIEW.REFRESH(LIST => 'MV_DAVE',METHOD => 'c');  

EXEC DBMS_MVIEW.REFRESH('MV_DAVE','C');  


 --快速刷新  


EXEC DBMS_MVIEW.REFRESH(LIST => 'MV_DAVE',METHOD => 'f');  

EXEC DBMS_MVIEW.REFRESH('MV_DAVE','F');  

6.删除物化视图及日志


--删除物化视图日志:  


DROP MATERIALIZED VIEW LOG ON DAVE;  


--删除物化视图  


DROP MATERIALIZED VIEW MV_DAVE;

7.删除物化视图及日志


 --删除物化视图日志:  


DROP MATERIALIZED VIEW LOG ON DAVE;  


--删除物化视图  


DROP MATERIALIZED VIEW MV_DAVE;  

8. 查看物化视图刷新状态信息


SELECT MVIEW_NAME, LAST_REFRESH_DATE, STALENESS FROMUSER_MVIEWS;  

SELECT NAME, LAST_REFRESH FROM USER_MVIEW_REFRESH_TIMES;

9.查询物化视图日志

SELECT * FROM MLOG$_DAVE; 

10.删除物化视图日志

drop materialized view log on table1; 

11.删除物化视图

drop materialized view mv_table1;