文档库 最新最全的文档下载
当前位置:文档库 › ORACLE物化视图

ORACLE物化视图

ORACLE物化视图
ORACLE物化视图

1简介

物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。

物化视图可以查询表,视图和其它的物化视图。

通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。

对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。

对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。

物化视图对于前台数据库使用者来说如同一个实际的表,具有和一般表相通的如select等操作,而其实际上是一个视图,一个由系统实现定期刷新其数据的视图(具体刷新时间在定义物化视图的时候已有定义),使用物化视图更可以实现视图的所有功能,而物化视图确不是在使用时才读取,大大提高了读取速度,特别适用抽取大数据量表某些信息以及数据链连接表使用。

本篇我们将会看到怎样创建物化视图并且讨论它的刷新选项。

2物化视图语法

create materialized view [view_name]

[

[build immediate | build deferred]

[enable query rewrite | disable query rewrite]

[refresh [fast | complete | force | nevel]]

[on demand | commit]

[start with date] [next date]

[with {primary key|rowid}]

]

as

{创建物化视图用的查询语句}

Build Methods(创建方式)

Query Rewrite(查询重写)

查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据。默认为DISABLE QUERY REWRITE。

Refresh属性 (刷新方式

)

On Demand And Commit属性(刷性机制)

刷新时间控制

根据基表主键或rowid创建

3演示例子

3.1建立物化视图日志

create materialized view log on mv_lvy_levytaxbgtdiv

tablespace zgmv_date --日志保存在特定的表空间

with rowid;

create materialized view log on tb_lvy_levydetaildata

tablespace zgmv_date --日志保存在特定的表空间

with rowid,sequence(levydetaildataid);

create materialized view log on tb_lvy_levydata

tablespace zgmv_date --日志保存在特定的表空间

with rowid,sequence(levydataid);

3.2创建物化视图

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'

3.3删除物化视图日志

DROP materialized view log on mv_lvy_levytaxbgtdiv; --删除物化视图日子DROP materialized view log on tb_lvy_levydetaildata; --删除物化视图日子DROP materialized view log on tb_lvy_levydata; --删除物化视图日子

3.4删除物化视图

drop materialized view mv_lvy_levydetaildata; --删除物化视图

3.5主键物化视图

create materialized view mv_emp_pk

refresh fast--根据视图日志文件DML操作刷新物化视图

start with sysdate--立即刷新视图

next sysdate + 2--下一次刷新视图为两天后的当前时间

with primary key--根据基表主键创建物化视图

as

select * from emp@remote_db;

START WITH子句通知数据库完成从主表到本地表第一次复制的时间,应该及时估计下一次运行的时间点, NEXT 子句说明了刷新的间隔时间.

在上面的例子中,物化视图数据的第一个副本在创建时生成,以后每两天刷新一次.

当用FAST选项创建物化视图,必须创建基于主表的视图日志,如下:

create materialized view log on emp;

3.6Rowid物化视图

create materialized view mv_emp_rowid

refresh

with rowid

as

select * from emp@remote_db;

4物化视图种类

物化视图可以分为以下三种类型:

?包含聚集的物化视图;

?只包含连接的物化视图;

?嵌套物化视图

三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大。注释:三种物化视图具体详细介绍请自行查找资料。

5物化视图日志

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

6常见问题

6.1定位导致物化视图无法快速刷新的原因

物化视图的快速刷新采用了增量的机制,在刷新时,只针对基表上发生变化的数据进行刷新。因此快速刷新是物化视图刷新方式的首选。但是快速刷新具有较多的约束,而且对于采用ON COMMIT模式进行快速刷新的物化视图更是如此。对于包含聚集和包含连接的物化视图的快速刷新机制并不相同,而且对于多层嵌套的物化视图的快速刷新更是有额外的要求。如此多的限制一般很难记全,当建

立物化视图失败时,Oracle给出的错误信息又过于简单,有时无法使你准确定位到问题的原因。

Oracle提供的dbms_mview.explain_mview过程可以帮助你快速定位问题的原因。

注视:dbms_mview.explain_mview过程使用请查找其他资料。

相关文档