ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 物化视图

物化视图

原创 Linux操作系统 作者:程风子 时间:2013-04-09 14:27:06 0 删除 编辑

oracle物化视图创建过程:

物化视图可以分为以下三种类型:包含聚集的物化视图;只包含连接的物化视图;嵌套物化视图

1、创建物化视图快速刷新日志:

create materialized view log on table_name

with primary key

includeing new values;

 

物化视图日志:如果需要进行快速刷新,则需要建立物化视图日志。物化视图日志根据不同物化视图的快速刷新的需要,可以建立为ROWID或PRIMARY KEY类型的。还可以选择是否包括SEQUENCE、INCLUDING NEW VALUES以及指定列的列表。

可以指明ON PREBUILD TABLE语句将物化视图建立在一个已经存在的表上。这种情况下,物化视图和表必须同名。当删除物化视图时,不会删除同名的表。这种物化视图的查询重写要求参数QUERY_REWRITE_INTEGERITY必须设置为trusted或者stale_tolerated。

 

2、穿件物化视图:

create materialized view mv_name

building immediate

refresh fast with  primary key  --根据主表主键增量刷新(FAST,增量)

on demand

enable query rewrite

as

select * from table_name;

 

创建方式(Build Methods):包括BUILD IMMEDIATE和BUILD DEFERRED两种。默认为BUILD IMMEDIATE。

1)BUILD IMMEDIATE是在创建物化视图的时候就生成数据;

2)BUILD DEFERRED则在创建时不生成数据,以后根据需要在生成数据。

 

物化视图的刷新(Refresh):指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。

刷新的模式有两种:ON DEMAND和ON COMMIT。

1)ON DEMAND顾名思义,仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;

2)ON COMMIT是说,一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。

刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER。

1)  FAST刷新采用增量刷新,只刷新自上次刷新以后进行的修改。

2)  COMPLETE刷新对整个物化视图进行完全的刷新。

3)  FORCE方式在刷新时会去判断是否可以进行快速刷新。如果可以则采用FAST方式,否则采用COMPLETE的方式。

4)  NEVER指物化视图不进行任何刷新。

对于已经创建好的物化视图,可以修改其刷新方式,比如把物化视图mv_name的刷新方式修改为每天晚上10点刷新一次:

SQL> 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');

 

例子中以主键刷新,也可以以时间来刷新:

创建定时刷新的物化视图(指定物化视图每天刷新一次):

SQL> create materialized view mv_name refresh force on demand start with sysdate next sysdate+1;

上述创建的物化视图每天刷新,但是没有指定刷新时间,如果要指定刷新时间(比如每天晚上10:00定时刷新一次):

SQL> 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');

 

查询重写(Query Rewrite):包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。分别指出创建的物化视图是否支持查询重写。查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据。默认为DISABLE QUERY REWRITE。

 

3、视图刷新

create procedure p_mview_refresh as

begin

   dbms_mview.refresh(' mv_name ','f');

end p_mview_refresh ;

 

4、物化视图删除

drop materialized view log on table_name;

drop materialized view  mv_name ;

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28588471/viewspace-758060/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2013-02-20

  • 博文量
    2
  • 访问量
    5303