一,什么是物化视图
物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。
二,作用、
在类似统计功能中,查询操作是无可避免,而这些查询操作如果很频繁,对整体数据库性能是很致命的。而物化视图实现远程数据源与本地数据的实时同步,也就是定时刷新,通过在本地创建物化视图可以大大提高查询效率。
三,流程图:
当用户要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中必须创建了远程数据库的dblink,通过dblink本地数据库可以像访问本地数据库一样访问远程数据库表中的数据。物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有实质上的好处。所以需要再在普通视图(view)上建立物化视图,程序通过对物化视图的访问可以大大提高效率。
四,图解步骤(使用PL/SQL)
1,客户端配置网络服务名
2,创建DataBase Links
3,创建物化视图
修改SQL,添加创建视图的模式,刷新的方式和同步时间间隔:
说明:
创建物化视图的模式的方式有两种:ON DEMAND 和ON COMMIT:
ON DEMAND指物化视图在用户需要的时候进行刷新,可以手工刷新,也可以通过JOB定时进行刷新。
ON COMMIT指物化视图在对基表的DML操作提交的同时进行刷新。
刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER
FAST:采用增量刷新,只刷新自上次刷新以后进行的修改。
COMPLETE:对整个物化视图进行完全的刷新
FORCE: Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式。
NEVER指物化视图不进行任何刷新。
默认值是FORCE ON DEMAND。
4,在物化视图上创建视图(统计)
5,在统计视图上创建物化视图
五,使用命令创建视图的步骤:
1,创建DB link
-- Drop existing database link
drop database link ZHUHAI.COM;
-- Create database link
create database link ZHUHAI.COM
connect to ZHUHAI
using 'haikou';
2,创建物化视图
CREATE MATERIALIZED VIEW MV_DBDIC
REFRESH FORCE ON DEMAND
ENABLE QUERY REWRITE
AS
SELECT "DBDIC"."ID" "ID","DBDIC"."DBNUM" "DBNUM","DBDIC"."NAME" "NAME" FROM "DBDIC"@ZHUHAI.COM "DBDIC";
3,创建视图
create or replace view countview as
select COUNT(*) COUNT
from MV_DBDIC;
4,在步骤3创建的视图上创建物化视图
create materialized view MV_COUNTVIEW
refresh force on demand
as
select *
from COUNTVIEW;
六,注意点:
1,需要先在客户端配置数据源网络服务名
2,数据源的源表必须有主键
3,ORA-32401: 实体化试图日志没有新增值
DROP materialized view log on FLT_DTL_D_1_MV01 ;
create materialized view log on FLT_DTL_D_1_MV01 with rowid including new values;
4,对于含有SUM.COUNT等聚集函数的物化视图 ,要聚集的列在物化视图日志中必须存在,group by 后面的列也要放到sequence里面(包含物化视图查询语句中的所有列,包括SELECT列表中的列和WHERE语句中的列)
DROP materialized view log on FLT_DTL_D_1_MV01 ;
create materialized view log on FLT_DTL_D_1_MV01 with rowid, sequence
(FLIGHT_DATE,REMAIN_DAY,TIME_DAY) including new values;
参考文档: