概述
物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询, Oracle 都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有实质上的好处。物化视图也是一种段(segment),物化视图会占用数据库磁盘空间
刷新的方法
刷新方式有四种: FAST、COMPLETE、FORCE和NEVER。 COMPLETE刷新对整个物化视图进行完全的刷新。 FORCE方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式 。 NEVER指物化视图不进行任何刷新。 |
基本语法:
CREATE MATERIALIZED VIEW [view_name] REFRESH [force|fast|complete|never] on [demand|commit] AS SELECT…..
举例
1、COMMIT时同步 CREATE MATERIALIZED VIEW TB_MAR_VIEW REFRESH FORCE ON COMMIT AS SELECT A.NAME, b.age, b.sex FROM tb_mar_01 A,tb_mar_02 b WHERE A.NAME=b.NAME; 2、定时同步 on commit 改为 on demand start with sysdate next sysdate+1 (指定物化视图每天刷新一次) |
注意:如果源表被truncate,则后续物化视图无法同步
手动刷新物化视图
BEGIN DBMS_MVIEW.REFRESH ( list => 'TB_MAR_VIEW', Method =>'COMPLETE', refresh_after_errors => True); end; 附:DBMS_MVIEW.REFRESH相关说明 【list | tab】 { list IN VARCHAR2,--list与tab互斥,仅可取其一| tab IN DBMS_UTILITY.UNCL_ARRAY,} 【method】 method IN VARCHAR2 := NULL,--刷新方法,可为:c,f,?,p分别代表:complete,fast,force,a和c相同,p即通过重新计算物化视图基于变化分区从而进行刷新;如list多于method,则采用默认刷新方法 【rollback_seg】 rollback_seg IN VARCHAR2 := NULL,--刷新所有rollback segment 【push_deferred_rpc】 push_deferred_rpc IN BOOLEAN := true,--刷新前把mv变化传播到master table.如不指定,则丢失mv变化;仅用于可更新mv 【refresh_after_errors】 refresh_after_errors IN BOOLEAN := false,--与下述字典deferror有关;如值为true,即便deferror出错,继续刷新.如atomic_refresh=false则继续刷新其它的物化视图 【purge_option】 purge_option IN BINARY_INTEGER := 1,--如为0不清理,1为lazy purge,一般此为最佳配置.2则为更积级性的purge 【parallelism】 parallelism IN BINARY_INTEGER := 0,--如为0则表示为序列化传播,如为1即为并行传播,大于1同理 【heap_size】 heap_size IN BINARY_INTEGER := 0,--最好不要显式配置此参数,除非在ORACLE支持下;指定并行传播同时检查的最大事务数 【atomic_refresh】 atomic_refresh IN BOOLEAN := true,--是否在同一个事务中刷新所有物化视图 【nested】 nested IN BOOLEAN := false);--如指定为true,则一并刷新依赖的物化视图 |
其他
物化视图日志:create materialized view log on tb3; snapshot log:表名为:mlog$tb3 |