一.    物化视图概述

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

物化视图可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。

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

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

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

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

在复制环境下,创建的物化视图通常情况下主键,rowid,和子查询视图。

物化视图由于是物理真实存在的,故可以创建索引。

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

(1)    包含聚集的物化视图;

(2)    只包含连接的物化视图;

(3)    嵌套物化视图。

三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大。创建物化视图时可以指定多种选项,下面对几种主要的选择进行简单说明:

(1)创建方式(BuildMethods):包括BUILD IMMEDIATE和BUILD DEFERRED两种。

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

BUILD DEFERRED则在创建时不生成数据,以后根据需要在生成数据。默认为BUILD IMMEDIATE。

(2)查询重写(QueryRewrite):包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。

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

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

ON DEMAND和ON COMMIT物化视图的区别在于其刷新方法的不同,ON DEMAND指物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新,即更新物化视图,以保证和基表数据的一致性;而ON COMMIT是说,一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。

对基表,平常的COMMIT在0.01秒内可以完成,但在有了ON COMMIT视图后,居然要6秒。速度减低了很多倍。ON COMMIT视图对基表的影响可见一斑。

1.2 物化视图,根据不同的着重点可以有不同的分类:

1)        按刷新方式分:FAST/COMPLETE/FORCE

2)        按刷新时间的不同:ON DEMAND/ON COMMIT

3)        按是否可更新:UPDATABLE/READ ONLY

4)        按是否支持查询重写:ENABLE QUERY REWRITE/DISABLEQUERY REWRITE

默认情况下,如果没指定刷新方法和刷新模式,则Oracle默认为FORCE和DEMAND。

注意:设置REFRESH ON COMMIT的物化视图不能访问远端对象。

在建立物化视图的时候可以指定ORDER BY语句,使生成的数据按照一定的顺序进行保存。不过这个语句不会写入物化视图的定义中,而且对以后的刷新也无效。

1.3 物化视图有三种刷新方式:COMPLETE、FAST和 FORCE。

1)        完全刷新(COMPLETE)会删除表中所有的记录(如果是单表刷新,可能会采用TRUNCATE的方式),然后根据物化视图中查询语句的定义重新生成物化视图。

2)        快速刷新(FAST)采用增量刷新的机制,只将自上次刷新以后对基表进行的所有操作刷新到物化视图中去。FAST必须创建基于主表的视图日志。

对于增量刷新选项,如果在子查询中存在分析函数,则物化视图不起作用。

3)        采用FORCE方式,Oracle会自动判断是否满足快速刷新的条件,如果满足则进行快速刷新,否则进行完全刷新。

Oracle物化视图的快速刷新机制是通过物化视图日志完成的。Oracle通过一个物化视图日志还可以支持多个物化视图的快速刷新。

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

1.4 物化视图Refresh子句的其他说明与示例

REFRESH 子句可以包含如下部分:

[refresh [fast|complete|force]

[on demand | commit]

[start with date] [next date]

[with {primary key|rowid}]]

1.4.1 主键和ROWD子句:

WITH PRIMARY KEY选项生成主键物化视图,也就是说物化视图是基于主表的主键,而不是ROWID(对应于ROWID子句). PRIMARY KEY是默认选项,为了生成PRIMARY KEY子句,应该在主表上定义主键,否则应该用基于ROWID的物化视图.

基于ROWID物化视图只有一个单一的主表,不能包括下面任何一项:

(1).Distinct 或者聚合函数.

(2)    .Group by,子查询,连接和SET操作

--主键(PrimaryKey)物化视图示例:

在远程数据库表emp上创建主键物化视图:

CREATEMATERIALIZEDVIEW mv_emp_pk

REFRESHFASTSTARTWITHSYSDATE

NEXT  SYSDATE + 1/48

WITHPRIMARYKEY

ASSELECT * FROM emp@remote_db

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

CREATEMATERIALIZEDVIEWLOGON emp;

--Rowid物化视图示例:

下面的语法在远程数据库表emp上创建Rowid物化视图

CREATEMATERIALIZEDVIEW mv_emp_rowid

REFRESHWITHROWID

ASSELECT * FROM emp@remote_db;

Materializedviewlog created.

--子查询物化视图示例:

在远程数据库表emp上创建基于emp和dept表的子查询物化视图

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 刷新时间

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

CREATEMATERIALIZEDVIEW mv_emp_pk

REFRESHFAST

STARTWITHSYSDATE

NEXT  SYSDATE + 2

WITHPRIMARYKEY

ASSELECT * FROM emp@remote_db;

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

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.5 ON PREBUILD TABLE 说明

在创建物化视图时指明ON PREBUILD TABLE语句,可以将物化视图建立在一个已经存在的表上。这种情况下,物化视图和表必须同名。当删除物化视图时,不会删除同名的表。

这种物化视图的查询重写要求参数QUERY_REWRITE_INTEGERITY必须设置为trusted或者stale_tolerated。

1.6 物化视图分区

物化视图可以进行分区。而且基于分区的物化视图可以支持分区变化跟踪(PCT)。具有这种特性的物化视图,当基表进行了分区维护操作后,仍然可以进行快速刷新操作。对于聚集物化视图,可以在GROUP BY列表中使用CUBE或ROLLUP,来建立不同等级的聚集物化视图。

相关内容参考:

二.    物化视图操作示例

1.     创建物化视图需要的权限:

GRANT CREATE MATERIALIZED VIEW TO USER_NAME;

2.  在源表建立物化视图日志

CREATE MATERIALIZED VIEW LOG ON DAVE

TABLESPACE&BISONCU_SPACE           -- 日志空间

WITH PRIMARY KEY;                   -- 指定为主键类型

3.  授权给中间用户

GRANT SELECT ON DAVE TO ANQING;

GRANT SELECT ON MLOG$_DAVE TO ANQING;

4.  在目标数据库上创建MATERIALIZED VIEW

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.  在目标物化视图上创建索引

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 手工刷新

如:

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 和next time的刷新时间,那么Oracle 会自动创建刷新的job,并采用dbms_refresh.refresh 的方式。

使用这种方式刷新之前需要先make refresh group,然后才可以刷新。

Refreshmake 的语法可以参考:

示例:

假设存在物化视图MV_T1, MV_T2, MV_T3. 创建refresh group的语法如下:

SQL> EXEC DBMS_REFRESH.MAKE('REP_TEST', 'MV_T1,MV_T2,MV_T3', SYSDATE, 'SYSDATE+ 1')

--刷新整个refresh group 组:

SQL> EXEC DBMS_REFRESH.REFRESH('REP_TEST')

7. 删除物化视图及日志

--删除物化视图日志:

DROP MATERIALIZED VIEW LOG ON DAVE;

--删除物化视图

DROP MATERIALIZED VIEW MV_DAVE;

8. 查看物化视图刷新状态信息

SQL> SELECT MVIEW_NAME, LAST_REFRESH_DATE, STALENESS FROMUSER_MVIEWS;

SQL> SELECT NAME, LAST_REFRESH FROM USER_MVIEW_REFRESH_TIMES;

9. 查询物化视图日志:

SELECT * FROM MLOG$_DAVE;

oracle雾化试图_Oracle 物化视图 说明相关推荐

  1. oracle雾化试图_Oracle物化视图语法

    物化视图概述: Oracle的物化视图提供了强大的功能,可以用在不同的环境中.在不同的环境中,物化视图的作用也不相同.数据仓库中的物化视图主要用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样 ...

  2. oracle雾化试图_ORACLE物化视图具体解释

    一.物化的一般使用方法物化视图是一种特殊的物理表,"物化"(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,不论什么对视图的查询,oracle ...

  3. oracle雾化试图_Oracle创建物化视图

    Oracle创建物化视图 通过Oracle物化视图章节,我们已经了解到Oracle物化视图的作用和创建原理,本节通过实例详细讲解Oracle是如何创建物化视图的. 创建物化视图语法: 语法:creat ...

  4. Oracle 如何根据物化视图日志快速刷新物化视图 (不积跬步,无以至千里)

    Oracle物化视图的快速刷新机制是通过物化视图日志完成的.Oracle如何通过一个物化视图日志就可以支持多个物化视图的快速刷新呢,本文简单的描述一下刷新的原理. 首先,看一下物化视图的结构: SQL ...

  5. Oracle 11g 通过创建物化视图实现不同数据库间的表数据同步

    Oracle 11g 物化视图语法如下: create materialized view [view_name] refresh [fast|complete|force] [ on [commit ...

  6. 傅老师课堂:Oracle高级应用之物化视图(materialized view)

    原文地址:http://hi.baidu.com/gukeming888/blog/item/2682f69481c8237154fb9662.html 物化视图 (Materialized View ...

  7. oracle including new values,物化视图日志加不加INCLUDING NEW VALUES有什么影响

    满意答案 ap.jil 2016.06.30 采纳率:58%    等级:9 已帮助:213人 NEW VALUES Clause The NEW VALUES clause lets you det ...

  8. oracle视图查询机制,物化视图及日志内部机制的一点研究

    Oracle物化视图的快速刷新机制是通过物化视图日志完成的.Oracle如何通过一个物化视图日志就可以支持多个物化视图的快速刷新呢,本文简单的描述一下刷新的原理. 首先,看一下物化视图的结构: SQL ...

  9. oracle 物化视图、中间表的方案

    物化视图 有个项目因为有比较多的查询汇总,考虑到速度,所以使用了物化视图.简单的把用到的给整理了下.先看简单创建语句: create materialized view mv_materialized ...

最新文章

  1. DialogFragment 的使用
  2. [Android官方API阅读]___Application Fundamentals
  3. SDN教育城域网解决方案
  4. 美观实用的标签切换菜单
  5. 电动葫芦使用注意事项(转载)
  6. JAVA遍历map元素
  7. 利用ST MCU内部的基准参考电压监测电源电压及其它
  8. 在IDEA中编辑struts国际化properties文件
  9. CAD 卸载工具,完美彻底卸载清除干净cad各种残留注册表和文件
  10. 目前国内的跨境收款通道有哪些还不错的?
  11. 外贸常用术语_常用外贸术语
  12. 【Pytorch with fastai】第 11 章 :使用 fastai 的中级 API 进行数据处理
  13. 网络状态测试程序(基于ping命令)
  14. Android 更换壁纸 代码
  15. win10总强制更新?教你永久关闭
  16. 【RMAN】RMAN脚本中使用替换变量
  17. 002-CANoe 10.0 SP3 软件和CAN卡的配置笔记
  18. 桌面级群控机器人CoCube探索-2022-
  19. qt Type defaults to ‘int‘ in declaration of
  20. 毕业设计Java企业车辆管理系统设计与实现源码+论文+视频

热门文章

  1. 10、MySQL锁等待,死锁,死锁检测
  2. 4.1.2 文件的逻辑结构
  3. c语言随机产生arp报文,c语言构造arp报文
  4. kindle亚马逊个人文档不显示_4.68亿个人信息泄露,大数据时代裸奔?探悉不落地的文档在线预览...
  5. 神奇的 SQL 之擦肩而过 → 真的用到索引了吗
  6. Oracle数据库之基本查询
  7. struts2控制标签(一)选择标签,iterator标签,append标签
  8. Java中Scanner的理解大总结
  9. 计算机网络(二)计算机网络 体系结构和OSI参考模型 | 思维导图
  10. ubuntu20.0.4更新至中文环境 | 具体步骤 + 图文详解