版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一.
物化视图概述\o"Oracle知识库"Oracle的物化视图是包括一个查询结果的\o"MySQL知识库"数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。物化视图可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。物化视图可以查询表,视图和其它的物化视图。通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。在复制环境下,创建的物化视图通常情况下主键,rowid,和子查询视图。物化视图由于是物理真实存在的,故可以创建索引。1.1
物化视图可以分为以下三种类型(1)包含聚集的物化视图;(2)只包含连接的物化视图;(3)嵌套物化视图。三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大。创建物化视图时可以指定多种选项,下面对几种主要的选择进行简单说明:(1)创建方式(BuildMethods):包括BUILDIMMEDIATE和BUILDDEFERRED两种。BUILDIMMEDIATE是在创建物化视图的时候就生成数据。BUILDDEFERRED则在创建时不生成数据,以后根据需要在生成数据。默认为BUILDIMMEDIATE。(2)查询重写(QueryRewrite):包括ENABLEQUERYREWRITE和DISABLEQUERYREWRITE两种。分别指出创建的物化视图是否支持查询重写。查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据。默认为DISABLEQUERYREWRITE。(3)刷新(Refresh):指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。刷新的模式有两种:ONDEMAND和ONCOMMIT。ONDEMAND和ONCOMMIT物化视图的区别在于其刷新方法的不同,ONDEMAND指物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新,即更新物化视图,以保证和基表数据的一致性;而ONCOMMIT是说,一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。对基表,平常的COMMIT在0.01秒内可以完成,但在有了ONCOMMIT视图后,居然要6秒。速度减低了很多倍。ONCOMMIT视图对基表的影响可见一斑。1.2
物化视图,根据不同的着重点可以有不同的分类:1)按刷新方式分:FAST/COMPLETE/FORCE2)按刷新时间的不同:ONDEMAND/ONCOMMIT3)按是否可更新:UPDATABLE/READONLY4)按是否支持查询重写:ENABLEQUERYREWRITE/DISABLEQUERYREWRITE默认情况下,如果没指定刷新方法和刷新模式,则Oracle默认为FORCE和DEMAND。注意:设置REFRESHONCOMMIT的物化视图不能访问远端对象。在建立物化视图的时候可以指定ORDERBY语句,使生成的数据按照一定的顺序进行保存。不过这个语句不会写入物化视图的定义中,而且对以后的刷新也无效。1.3
物化视图有三种刷新方式:COMPLETE、FAST和
FORCE。1)完全刷新(COMPLETE)会删除表中所有的记录(如果是单表刷新,可能会采用TRUNCATE的方式),然后根据物化视图中查询语句的定义重新生成物化视图。2)快速刷新(FAST)采用增量刷新的机制,只将自上次刷新以后对基表进行的所有操作刷新到物化视图中去。FAST必须创建基于主表的视图日志。对于增量刷新选项,如果在子查询中存在分析函数,则物化视图不起作用。3)采用FORCE方式,Oracle会自动判断是否满足快速刷新的条件,如果满足则进行快速刷新,否则进行完全刷新。Oracle物化视图的快速刷新机制是通过物化视图日志完成的。Oracle通过一个物化视图日志还可以支持多个物化视图的快速刷新。物化视图日志根据不同物化视图的快速刷新的需要,可以建立为ROWID或PRIMARYKEY类型的。还可以选择是否包括SEQUENCE、INCLUDINGNEWVALUES以及指定列的列表。1.4
物化视图Refresh子句的其他说明与示例REFRESH子句可以包含如下部分:[refresh[fast|complete|force][ondemand|commit][startwithdate][nextdate][with{primarykey|rowid}]]1.4.1
主键和ROWD子句:WITHPRIMARYKEY选项生成主键物化视图,也就是说物化视图是基于主表的主键,而不是ROWID(对应于ROWID子句).PRIMARYKEY是默认选项,为了生成PRIMARYKEY子句,应该在主表上定义主键,否则应该用基于ROWID的物化视图.基于ROWID物化视图只有一个单一的主表,不能包括下面任何一项:(1).Distinct或者聚合函数.(2).Groupby,子查询,连接和SET操作--主键(PrimaryKey)物化视图示例:在远程数据库表emp上创建主键物化视图:[sql]
\o"viewplain"viewplain\o"copy"copyCREATEMATERIALIZEDVIEWmv_emp_pkREFRESHFASTSTARTWITHSYSDATENEXT
SYSDATE+1/48WITHPRIMARYKEYASSELECT*
FROM
emp@remote_db[sql]
\o"viewplain"viewplain
\o"copy"copy
CREATEMATERIALIZEDVIEW
mv_emp_pk
REFRESHFASTSTARTWITHSYSDATE
NEXT
SYSDATE
+
1/48
WITHPRIMARYKEY
ASSELECT
*
FROM
emp@remote_db
--当用FAST选项创建物化视图,必须创建基于主表的视图日志,如下:[sql]
\o"viewplain"viewplain\o"copy"copyCREATEMATERIALIZEDVIEWLOGONemp;[sql]
\o"viewplain"viewplain
\o"copy"copy
CREATEMATERIALIZEDVIEWLOGON
emp;
--Rowid物化视图示例:下面的语法在远程数据库表emp上创建Rowid物化视图[sql]
\o"viewplain"viewplain\o"copy"copyCREATEMATERIALIZEDVIEWmv_emp_rowidREFRESHWITHROWIDASSELECT*
FROM
emp@remote_db;Materializedviewlogcreated.[sql]
\o"viewplain"viewplain
\o"copy"copy
CREATEMATERIALIZEDVIEW
mv_emp_rowid
REFRESHWITHROWID
ASSELECT
*
FROM
emp@remote_db;
Materializedviewlog
created.
--子查询物化视图示例:在远程数据库表emp上创建基于emp和dept表的子查询物化视图[sql]
\o"viewplain"viewplain\o"copy"copyCREATEMATERIALIZEDVIEWmv_empdeptASSELECT*
FROM
emp@remote_dbeWHEREEXISTS(SELECT
*
FROM
dept@remote_dbdWHEREe.dept_no=d.dept_no)[sql]
\o"viewplain"viewplain
\o"copy"copy
CREATEMATERIALIZEDVIEW
mv_empdept
ASSELECT
*
FROM
emp@remote_db
e
WHEREEXISTS
(SELECT
*
FROM
dept@remote_db
d
WHEREe.dept_no
=
d.dept_no)
1.4.2
刷新时间STARTWITH子句通知数据库完成从主表到本地表第一次复制的时间,应该及时估计下一次运行的时间点,NEXT子句说明了刷新的间隔时间.[sql]
\o"viewplain"viewplain\o"copy"copyCREATEMATERIALIZEDVIEWmv_emp_pkREFRESHFASTSTARTWITHSYSDATENEXT
SYSDATE+2WITHPRIMARYKEYASSELECT*
FROM
emp@remote_db;[sql]
\o"viewplain"viewplain
\o"copy"copy
CREATEMATERIALIZEDVIEW
mv_emp_pk
REFRESHFAST
STARTWITHSYSDATE
NEXT
SYSDATE
+
2
WITHPRIMARYKEY
ASSELECT
*
FROM
emp@remote_db;
在上面的例子中,物化视图数据的第一个副本在创建时生成,以后每两天刷新一次.[sql]
\o"viewplain"viewplain\o"copy"copycreatematerializedviewMV_LVY_LEVYDETAILDATATABLESPACEZGMV_DATA
--保存表空间BUILDDEFERRED--延迟刷新不立即刷新refreshforce--如果可以快速刷新则进行快速刷新,否则完全刷新ondemand--按照指定方式刷新startwithto_date('24-11-200518:00:10',
'dd-mm-yyyyhh24:mi:ss')
--第一次刷新时间nextTRUNC(SYSDATE+1)+18/24--刷新时间间隔asSELECT
*
FROM
emp@remote_db;[sql]
\o"viewplain"viewplain
\o"copy"copy
creatematerializedviewMV_LVY_LEVYDETAILDATA
TABLESPACE
ZGMV_DATA
--保存表空间
BUILDDEFERRED--延迟刷新不立即刷新
refreshforce--如果可以快速刷新则进行快速刷新,否则完全刷新
ondemand--按照指定方式刷新
startwith
to_date('24-11-200518:00:10',
'dd-mm-yyyyhh24:mi:ss')
--第一次刷新时间
nextTRUNC(SYSDATE+1)+18/24--刷新时间间隔
as
SELECT
*
FROM
emp@remote_db;
1.5ONPREBUILDTABLE
说明在创建物化视图时指明ONPREBUILDTABLE语句,可以将物化视图建立在一个已经存在的表上。这种情况下,物化视图和表必须同名。当删除物化视图时,不会删除同名的表。这种物化视图的查询重写要求参数QUERY_REWRITE_INTEGERITY必须设置为trusted或者stale_tolerated。1.6
物化视图分区物化视图可以进行分区。而且基于分区的物化视图可以支持分区变化跟踪(PCT)。具有这种特性的物化视图,当基表进行了分区维护操作后,仍然可以进行快速刷新操作。对于聚集物化视图,可以在GROUPBY列表中使用CUBE或ROLLUP,来建立不同等级的聚集物化视图。相关内容参考:Oracle物化视图日志与快速刷新说明/tianlesoftware/article/details/7720580Oracle物化视图详细错误描述查看方法/tianlesoftware/article/details/7719789Oracle物化视图快速刷新限制说明/tianlesoftware/article/details/7719679二.
物化视图操作示例1.
创建物化视图需要的权限:[sql]
\o"viewplain"viewplain\o"copy"copyGRANT
CREATE
MATERIALIZED
VIEW
TO
USER_NAME;[sql]
\o"viewplain"viewplain
\o"copy"copy
GRANT
CREATE
MATERIALIZED
VIEW
TO
USER_NAME;
2.
在源表建立物化视图日志[sql]
\o"viewplain"viewplain\o"copy"copyCREATE
MATERIALIZED
VIEW
LOG
ON
DAVETABLESPACE&BISONCU_SPACE
--日志空间WITH
PRIMARY
KEY;
--指定为主键类型[sql]
\o"viewplain"viewplain
\o"copy"copy
CREATE
MATERIALIZED
VIEW
LOG
ON
DAVE
TABLESPACE&BISONCU_SPACE
--
日志空间
WITH
PRIMARY
KEY;
--
指定为主键类型
3.
授权给中间用户[sql]
\o"viewplain"viewplain\o"copy"copyGRANT
SELECT
ON
DAVE
TO
ANQING;GRANT
SELECT
ON
MLOG$_DAVE
TO
ANQING;[sql]
\o"viewplain"viewplain
\o"copy"copy
GRANT
SELECT
ON
DAVE
TO
ANQING;
GRANT
SELECT
ON
MLOG$_DAVE
TO
ANQING;
4.
在目标数据库上创建MATERIALIZEDVIEW[sql]
\o"viewplain"viewplain\o"copy"copyCREATE
MATERIALIZED
VIEW
AICS_DAVETABLESPACE&BISONCS_SPACEREFRESHFASTON
DEMAND--第一次刷新时间--STARTWITHto_date('2012-01-0120:00:00','yyyy-mm-ddhh24:mi:ss')START
WITH
SYSDATE--刷新时间间隔。每1天刷新一次,时间为凌晨2点--NEXTTRUNC(SYSDATE,'dd')+1+2/24NEXT
SYSDATE+1/24/20WITH
PRIMARY
KEY--USINGDEFAULTLOCALROLLBACKSEGMENTDISABLEQUERYREWRITE
ASSELECT
MODEL_ID,STATUS,MODEL_NAME,MANU_ID,DESCRIPTION,CREATE_TIME,UPDATE_TIME,SW_VERSIONFROM
AICS_DAVE@LINK_DAVE;[sql]
\o"viewplain"viewplain
\o"copy"copy
CREATE
MATERIALIZED
VIEW
AICS_DAVE
TABLESPACE&BISONCS_SPACE
REFRESH
FAST
ON
DEMAND
--第一次刷新时间
--START
WITH
to_date('2012-01-01
20:00:00',
'yyyy-mm-dd
hh24:mi:ss')
START
WITH
SYSDATE
--刷新时间间隔。每1天刷新一次,时间为凌晨2点
--NEXT
TRUNC(SYSDATE,'dd')+1+2/24
NEXT
SYSDATE+1/24/20
WITH
PRIMARY
KEY
--USING
DEFAULT
LOCAL
ROLLBACKSEGMENT
DISABLE
QUERY
REWRITE
AS
SELECT
MODEL_ID,
STATUS,MODEL_NAME,
MANU_ID,
DESCRIPTION,
CREATE_TIME,
UPDATE_TIME,
SW_VERSION
FROM
AICS_DAVE@LINK_DAVE;
5.
在目标物化视图上创建索引[sql]
\o"viewplain"viewplain\o"copy"copyCREATE
INDEX
IDX_T_DV_CTON
AICS_DEV_INFO(CREATE_TIME,UPDATE_TIME)TABLESPACE&BISON_IDX;CREATE
INDEX
IDX_T_DV_UTON
AICS_DEV_INFO(UPDATE_TIME)TABLESPACE&BISON_IDX;CREATE
INDEX
I_T_DV_MSISDNON
AICS_DEV_INFO(MSISDN)TABLESPACE&BISON_IDX;[sql]
\o"viewplain"viewplain
\o"copy"copy
CREATE
INDEX
IDX_T_DV_CT
ON
AICS_DEV_INFO
(CREATE_TIME,
UPDATE_TIME)
TABLESPACE
&BISON_IDX;
CREATE
INDEX
IDX_T_DV_UT
ON
AICS_DEV_INFO
(UPDATE_TIME)
TABLESPACE
&BISON_IDX;
CREATE
INDEX
I_T_DV_MSISDN
ON
AICS_DEV_INFO
(MSISDN)
TABLESPACE
&BISON_IDX;
6.
物化视图刷新说明(1)使用dbms_mview.refresh
手工刷新如:[sql]
\o"viewplain"viewplain\o"copy"copyEXEC
DBMS_MVIEW.REFRESH('MV_DAVE');--完全刷新EXEC
DBMS_MVIEW.REFRESH(LIST=>
'MV_DAVE',METHOD=>
'c');EXEC
DBMS_MVIEW.REFRESH('MV_DAVE','C');--快速刷新EXEC
DBMS_MVIEW.REFRESH(LIST=>
'MV_DAVE',METHOD=>
'f');EXEC
DBMS_MVIEW.REFRESH('MV_DAVE','F');[sql]
\o"viewplain"viewplain
\o"copy"copy
EXEC
DBMS_MVIEW.REFRESH('MV_DAVE');
--完全刷新
EXEC
DBMS_MVIEW.REFRESH(LIST
=>
'MV_DAVE',METHOD
=>
'c');
EXEC
DBMS_MVIEW.REFRESH('MV_DAVE','C');
--快速刷新
EXEC
DBMS_MVIEW.REFRESH(LIST
=>
'MV_DAVE',METHOD
=>
'f');
EXEC
DBMS_MVIEW.REFRESH('MV_DAVE','F');
(2)使用dbms_refresh.refresh
过程来批量刷新MV如果我们在创建物化视图的过程指定start和nexttime的刷新时间,那么Oracle会自动创建刷新的job,并采用dbms_refresh.refresh的方式。使用这种方式刷新之前需要先makerefreshgroup,然后才可以刷新。Refreshmake的语法可以参考:/cd/B19306_01/server.102/b14227/rarrefreshpac.htm#i94057示例:假设存在物化视图MV_T1,
MV_T2,MV_T3.创建refreshgroup的语法如下:[sql]
\o"viewplain"viewplain\o"copy"copySQL>
EXEC
DBMS_REFRESH.MAKE('REP_TEST',
'MV_T1,MV_T2,MV_T3',SYSDATE,
'SYSDATE+1')--刷新整个refreshgroup组:SQL>
EXEC
DBMS_REFRESH.REFRESH('REP_TEST')[sql]
\o"viewplain"viewplain
\o"copy"copy
SQL>
EXEC
DBMS_REFRESH.MAKE('REP_TEST',
'MV_T1,MV_T2,MV_T3',
SYSDATE,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 模拟摄像机的协议书
- 社会教育行为规范
- 股权收购协议书主要条款有
- 中国古代工匠精神人物典范
- 班级日常行为规范
- 2026重庆市万州区白羊镇人民政府招聘非全日制公益性岗位9人备考题库附答案详解
- 病理科:肿瘤病理报告解读流程
- 2026黑龙江齐齐哈尔市龙沙区南航街道公益性岗位招聘1人备考题库带答案详解(模拟题)
- 2026广西崇左宁明县那堪镇卫生院招聘1人备考题库含答案详解(a卷)
- 内分泌科甲减患者治疗方案培训
- 2026年水泥行业转型金融标准试点进展与项目申报指南
- 福建省福州市2026年中考适应性考试化学试题(含答案解析)
- 2026春统编版(新教材)小学道德与法治二年级下册(全册)各单元知识点复习课件
- 万豪酒店礼仪规范
- 按劳分配为主体、多种分配方式并存课件-2025-2026学年统编版道德与法治八年级下册
- 2026年成都文职辅警笔试题库及1套参考答案
- 【量子位智库】2025年度具身智能创业投融资全景报告
- 广州市财政投资信息化项目(运行维护类)方案编写指南
- 城市内涝风险评估方案
- 江西省国有资本运营控股集团有限公司2026年第一批批次公开招聘参考考试试题附答案解析
- 2026年心理咨询师考试题库300道附参考答案(综合题)
评论
0/150
提交评论