没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
Oracle 物化视图简介及实战时间
1. 物化视图说明
物化视图 (Materialized View),在以前的 Oracle 版本中称为快照(Snapshot)。Oracle 的物化视图提供了强大的功能,可以用
于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样在执行查询时,就可以避免进行这些耗时的操作,而从
快速地得到结果:
物化视图有很多方面和索引很相似:
使用物化视图的目的是为了提高查询性能
物化视图对应用透明,增加和删除物化视图不会影响应用程序中 SQL 语句的正确性和有效性
物化视图需要占用存储空间
当基表发生变化时,物化视图也应当刷新
物化视图可以分为以下三种类型:
包含聚集的物化视图
只包含连接的物化视图
嵌套物化视图
物化视图可以进行分区。而且基于分区的物化视图可以支持分区变化跟踪(PCT)。具有这种特性的物化视图,当基表进
行了分区维护操作后,仍然可以进行快速刷新操作。对于聚集物化视图,可以在 GROUP BY 列表中使用 CUBE 或
ROLLUP,来建立不同等级的聚集物化视图
2. 物化视图详细说明
1. refresh [fast|complete|force] 视图刷新的方式:
fast: 增量刷新.假设前一次刷新的时间为 t1,那么使用 fast 模式刷新物化视图时,只向视图中添加 t1 到当前时间段内,主表变
化过的数据.为了记录这种变化,建立增量刷新物化视图还需要一个物化视图日志表。 create materialized view log on (主
表名)。
complete:全部刷新。相当于重新执行一次创建视图的查询语句。
force: 这是默认的数据刷新方式。当可以使用 fast 模式时,数据刷新将采用 fast 方式;否则使用 complete 方式。
2.MV 数据刷新的时间:
on demand:在用户需要刷新的时候刷新,这里就要求用户自己动手去刷新数据了(也可以使用 job 定时刷新)
on commit:当主表中有数据提交的时候,立即刷新 MV 中的数据;
start ……:从指定的时间开始,每隔一段时间(由 next 指定)就刷新一次;
物化视图可以分为以下三种类型:包含聚集的物化视图;只包含连接的物化视图;嵌套物化视图。三种物化视图的快速
刷新的限制条件有很大区别,而对于其他方面则区别不大。创建物化视图时可以指定多种选项,下面对几种主要的选择
进行简单说明:
创建方式(Build Methods):包括 BUILD IMMEDIATE 和 BUILD DEFERRED 两种。BUILD IMMEDIATE 是在创建物化
视图的时候就生成数据,而 BUILD DEFERRED 则在创建时不生成数据,以后根据需要在生成数据。默认为 BUILD
IMMEDIATE。
查询重写(Query Rewrite):包括 ENABLE QUERY REWRITE 和 DISABLE QUERY REWRITE 两种。分别指出创建的
物化视图是否支持查询重写。查询重写是指当对物化视图的基表进行查询时,Oracle 会自动判断能否通过查询物化视图
来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据。默认为 DISABLE
QUERY REWRITE。
刷新(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。
在建立物化视图的时候可以指定 ORDER BY 语句,使生成的数据按照一定的顺序进行保存。不过这个语句不会写入物化
视图的定义中,而且对以后的刷新也无效。
物化视图日志:如果需要进行快速刷新,则需要建立物化视图日志。物化视图日志根据不同物化视图的快速刷新的需要 ,
可以建立为 ROWID 或 PRIMARY KEY 类型的。还可以选择是否包括 SEQUENCE、INCLUDING NEW VALUES 以及指定
列的列表。
可以指明 ON PREBUILD TABLE 语句将物化视图建立在一个已经存在的表上。这种情况下,物化视图和表必须同名。当
删除物化视图时,不会删除同名的表。这种物化视图的查询重写要求参数 QUERY_REWRITE_INTEGERITY 必须设置为
trusted 或者 stale_tolerated。
物化视图可以进行分区。而且基于分区的物化视图可以支持分区变化跟踪(PCT)。具有这种特性的物化视图,当基表进
行了分区维护操作后,仍然可以进行快速刷新操作。对于聚集物化视图,可以在 GROUP BY 列表中使用 CUBE 或
ROLLUP,来建立不同等级的聚集物化视图。
3. 物化视图详细 EDOME
创建物化视图时应先创建存储的日志空间
CREATE MATERIALIZED VIEW LOG ON mv_lvy_levytaxbgtdiv
tablespace ZGMV_DATA --日志保存在特定的表空间
WITH ROWID ;
CREATE MATERIALIZED VIEW LOG ON tb_lvy_levydetaildata
tablespace ZGMV_DATA --日志保存在特定的表空间
WITH ROWID,sequence(LEVYDETAILDATAID);
CREATE MATERIALIZED VIEW LOG ON tb_lvy_levydata
tablespace ZGMV_DATA --日志保存在特定的表空间
WITH rowid,sequence(LEVYDATAID);
然后创建物化视图
--创建物化视图
create materialized view MV_LVY_LEVYDETAILDATA
TABLESPACE ZGMV_DATA --保存表空间
BUILD DEFERRED --延迟刷新不立即刷新
refresh force --如果可以快速刷新则进行快速刷新,否则完全刷新
on demand --按照指定方式刷新
start with to_date('24-11-2005 18:00:10', 'dd-mm-yyyy hh24:mi:ss') --第一次刷新时间
next TRUNC(SYSDATE+1)+18/24 --刷新时间间隔
as
SELECT levydetaildataid, detaildatano, taxtermbegin, taxtermend,
......
ROUND(taxdeduct * taxpercent1, 2) - ROUND(taxdeduct * taxpercent2, 2) -
ROUND(taxdeduct * taxpercent3, 2) - ROUND(taxdeduct * taxpercent4, 2) -
ROUND(taxdeduct * taxpercent5, 2) taxdeduct, ROUND(taxfinal * taxpercent1, 2) -
ROUND(taxfinal * taxpercent2, 2) - ROUND(taxfinal * taxpercent3, 2) -
ROUND(taxfinal * taxpercent4, 2) - ROUND(taxfinal * taxpercent5, 2) taxfinal,
a.levydataid, a.budgetitemcode, taxtypecode,
......
FROM tb_lvy_levydetaildata a, tb_lvy_levydata c, MV_LVY_LEVYTAXBGTDIV b
WHERE a.levydataid = c.levydataid
AND a.budgetdistrscalecode = b.budgetdistrscalecode
AND a.budgetitemcode = b.budgetitemcode
AND c.incomeresidecode = b.rcvfisccode
AND C.TAXSTATUSCODE='08'
AND C.NEGATIVEFLAG!='9'
删除物化视图日志
--删除物化视图:
--删除日志: DROP materialized view log on mv_lvy_levytaxbgtdiv;
DROP materialized view log on tb_lvy_levydetaildata;
DROP materialized view log on tb_lvy_levydata;
--删除物化视图 drop materialized view MV_LVY_LEVYDETAILDATA
4. 物化视图授权
SQL> GRANT CREATE MATERIALIZED VIEW TO scott; --授予创建物化视图的权限(必须)
SQL> GRANT QUERY REWRITE TO scott; --实现查询重写权限,可无
SQL> GRANT ALTER ANY MATERIALIZED VIEW TO scott; --修改物化视图的权限,可无
SQL> GRANT LOCK ANY TABLE TO SCOTT; --可无
SQL> GRANT CREATE SESSION TO SCOTT; --可无, SCOTT 用户刷新物化视图
5. 物化视图语法
CREATE MATERIALIZED VIEW <schema.name>
PCTFREE <integer>
PCTUSED <integer>
TABLESPACE <tablespace_name>
BUILD IMMEDIATE
REFRESH <FAST | FORCE> ON <COMMIT | DEMAND>
<USING INDEX | USING NO INDEX>
INITRANS <integer>
STORAGE CLAUSE
AS (<SQL statement>);
CREATE MATERIALIZED VIEW [schema.]mview
Mview_Options
[USING INDEX storage_options]
[{REFRESH [refresh_options] |NEVER REFRESH]
[FORUPDATE] [{ENABLE|DISABLE} QUERY REWRITE]
AS subbquery;
CREATE MATERIALIZED VIEW [schema.]mview
ON PREBUILT TABLE [{WITH |WITHOUT} REDUCED PRECISION]
[USING INDEX storage_options]
[{REFRESH [refresh_options]| NEVER REFRESH]
[FORUPDATE] [{ENABLE|DISABLE} QUERY REWRITE]
AS subbquery;
--说明:上面的选项可安装自己的需要进行选择
6. 简单的物化视图 demo
CREATE MATERIALIZED VIEW emp_dept_view
REFRESH COMPLETE
剩余10页未读,继续阅读
资源评论
- langzi_zhang2012-08-24谢谢,最近做项目用到物化视图,零基础开始学习。不错的资料。
- jounzhang2015-01-29跟网上大部分帖子一样,讲的都是物化视图的基础概念及使用方法,并非系列讲解,可用于入门。
- MissDatura2015-03-09对于数据库新手还是很有用的。
wxj108
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功