这篇文章将为大家详细讲解有关oracle如何创建、刷新物化视图,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
Create materialized view log on F_RPT_TASK WITH ROWID --
----F_RPT_TASK为表名 ----注:(F_RPT_TASK为表名或者视图名,关于视图上建立物化视图,见基于视图的物化视图 ----创建物化视图语句:
DROP materialized view log on F_RPT_TASK
Create materialized view MV_F_RPT_TASK
----MVTEST为物化视图名
Build immediate ----创建时生成数据对应的是build deferred
Refresh fast ----增量刷新
On commit ----在基表有更新时提交,这里该句对视图无效
With PRIMARY KEY ----这里创建基于primary key 的物化视图,要与日志中对应的是 primary key ;若日志为 rowid 则此处必须为rowid
As
Select * from F_RPT_TASK where RPT_PERIOD in (2012,2011) ----生成物化视图数据语句
把物化视图改为nologging模式
alter table MV_VECAM01_2YEARS nologging;
需要权限:GRANT CREATE MATERIALIZED VIEW,还必须直接赋予GRANT QUERY REWRITE.
创建指定刷新试图:
1.包含SYSDATE/ROWNUM或RAW/LONG RAW数据类型;无法建立On commit方式刷新。
建立时候去掉注释。
Create materialized view log on tecam01
TABLESPACE CISA_GXPORTAL
WITH PRIMARY KEY
----tecam01为表名 ----注:(tecam01为表名或者视图名,关于视图上建立物化视图,见基于视图的物化视图 ----创建物化视图语句:
DROP materialized view log on tecam01
drop materialized view MV_vecam01_2years
Create materialized view MV_vecam01_2years
TABLESPACE CISA_GXPORTAL --保存表空间
BUILD DEFERRED --延迟刷新不立即刷新
refresh force --如果可以快速刷新则进行快速刷新,否则完全刷新
on demand --按照指定方式刷新
start with to_date('07-12-2013 12:00:10', 'dd-mm-yyyy hh34:mi:ss')
next sysdate+5/(24*60) --刷新时间间隔 5分钟一次
-- next TRUNC(SYSDATE+1)+18/24 --刷新时间间隔 隔一天的18点开始
As
SELECT * FROM tecam01 WHERE display_time > to_char((sysdate- 730),'yyyyMMdd' ) ;
相关资料:
刷新(Refresh):指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。刷新的模式有两种:ON DEMAND和ON COMMIT。ON DEMAND指物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新。ON COMMIT指出物化视图在对基表的DML操作提交的同时进行刷新。刷新的方法有四种:FAST、COMPLETE、FORCE和NEVE*。**ST刷新采用增量刷新,只刷新自上次刷新以后进行的修改。COMPLETE刷新对整个物化视图进行完全的刷新。如果选择FORCE方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式。NEVER指物化视图不进行任何刷新。默认值是FORCE ON DEMAND。
二、相关参数说明
创建物化视图主要选项说明
创建物化视图时可以指定多种选项,下面对几种主要的选项进行简单说明:
名称 | Build Clause | 创建方式 |
描述 | 包括BUILD IMMEDIATE和BUILD DEFERRED两种 | |
取值 | BUILD IMMEDIATE | 在创建实体化视图的时候就生成数据 |
BUILD DEFERRED | 在创建时不生成数据,以后根据需要在生成数据 | |
默认 | BUILD IMMEDIATE |
名称 | Query Rewrite | 查询重写 |
描述 |
包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。分别指出创建的实体化 视图是否支持查询重写。查询重写是指当对实体化视图的基表进行查询时,Oracle会自动判 断能否通过查询实体化视图来得到结果,如果可以,则避免了聚集或连接操作, 而直接从已经计算好的实体化视图中读取数据 | |
取值 | ENABLE QUERY REWRITE | 支持查询重写 |
DISABLE QUERY REWRITE | 不支持查询重写 | |
默认 | DISABLE QUERY REWRITE |
创建实体化试图日志主要选项说明
如果需要进行快速刷新,则需要建立实体化视图日志。实体化视图日志根据不同实体化
视图的快速刷新的需要,可以建立为ROWID或PRIMARY KEY类型的。还可以选择
是否包括SEQUENCE、INCLUDING NEW VALUES以及指定列的列表。
<table border="1" width="661" font-size:16px;background-color:#ffffff;"="">
名称 | WITH Clause | |
描述 | ||
取值 | OBJECT ID |
如果是对象实体化视图(object materialized view), 则只能采用该方式 |
PRIMARY KEY | ||
ROWID | ||
SEQUENCE | ||
默认 | PRIMARY KEY |
三、举例说明
1、简单示例
create materialized view MV_except_pattern_ordersrefresh
Complete on demand
start with to_date('2010-11-06 13:20:51','YYYY-MM-DD HH24:MI:SS')
next sysdate+1/(24*60)
as select * from v_except_pattern_orders
2、带日志物化视图
--创建物化视图日志
create materialized view log on table1tablespace ts_data --日志保存在特定的表空间
with rowid;--创建物化视图主体
create materialized view MV_LVY_LEVYDETAILDATATABLESPACE ZGMV_DATA
--保存表空间
BUILD DEFERRED --延迟刷新不立即刷新
refresh force --如果可以快速刷新则进行快速刷新,否则完全刷新
on demand --按照指定方式刷新
start with to_date('24-11-2005 18:00:10', 'dd-mm-yyyy hh34:mi:ss') --第一次刷新时间
next TRUNC(SYSDATE+1)+18/24 --刷新时间间隔
as
as select * from table1;
上面这部分转载自:
https://blog.csdn.net/dongcctv5/article/details/8614887
更新物化视图的刷新方式:
ALTER MATERIALIZED VIEW t_keyword_industry_sign
REFRESH FORCE
ON DEMAND
WITH ROWID
start with sysdate NEXT SYSDATE +30/24
物化视图的索引的创建:
create index index_testid on t_keyword_industry_sign(id);
索引的查询:
select * FROM user_indexes t where t.table_name='NGCC_BEST.T_CONTRACT';
关于“oracle如何创建、刷新物化视图”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。