物化视图是一种特殊的物理表,"物化"(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。

1、物化视图存储基于远程表的数据,也可以称为快照,把远程库某一节点时间的数据复制同步到了本地库中,直接查询本地库即可,效率变快(直接带有固定的结果集),只是会有时间差而已。
物化视图的类型:ON DEMAND、ON COMMIT二者的区别在于刷新方法的不同
ON DEMAND顾名思义,仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;而ON COMMIT是说,一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。
物化视图的创建本身是很复杂和需要优化参数设置的,特别是针对大型生产数据库系统而言。但Oracle允许以这种最简单的,类似于普通视图的方式来做,所以不可避免的会涉及到默认值问题。也就是说Oracle给物化视图的重要定义参数的默认值处理是我们需要特别注意的。
物化视图:在查询时直接读出物化视图中的数据。
普通视图:在查询时需要在查询中嵌套个子查询然后去访问原表。
物化视图:不可以更新,删除,修改等操作,只能够查询。
普通视图:可以更新,删除,修改等操作,但是这些操作将直接反应在原表中。
2、本地库创建物化视图
2-1需要的权限(或者直接给用户dba角色权限):
grant create materialized view to user_name;
2-2创建:
create materialized view mv_base_brand
refresh force on demand
start with sysdate next to_date(concat(to_char(sysdate+1,‘dd- mm-yyyy’),‘01:25:00’),‘dd-mm-yyyy hh24:mi:ss’)
– 每天01点25执行
as
select * from ensys_table;
2-3 查询视图:
select * from mv_ensys_table ;
3、本地创建普通视图
CREATE [OR REPLACE] [{ FORCE|NOFORCE}] VIEW view_nameASSELECT查询[WITH READ ONLY CONSTRAINT]
OR REPLACE:如果视图已经存在,则替换旧视图。
FORCE:即使基表不存在,也可以创建该视图,但是该视图不能正常使用,当基表创建成功后,视图才能正常使用。
NOFORCE:如果基表不存在,无法创建视图,该项是默认选项。
WITH READ ONLY:默认可以通过视图对基表执行增删改操作,但是有很多在基表上的限制(比如:基表中某列不能为空,但是该列没有出现在视图中,则不能通过视图执行insert操作),WITH READ ONLY说明视图是只读视图,不能通过该视图进行增删改操作。现实开发中,基本上不通过视图对表中的数据进行增删改操作。




