文档库 最新最全的文档下载
当前位置:文档库 › 物化视图使用详解

物化视图使用详解

物化视图使用详解
物化视图使用详解

一.物化视图概述

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上创建主键物化视图:

[sql]view plaincopy

1.CREATEMATERIALIZEDVIEW mv_emp_pk

2.REFRESHFASTSTARTWITHSYSDATE

3.NEXT SYSDATE + 1/48

4.WITHPRIMARYKEY

5.ASSELECT * FROM emp@remote_db

1.CREATEMATERIALIZEDVIEW mv_emp_pk

2.REFRESHFASTSTARTWITHSYSDATE

3.NEXT SYSDATE + 1/48

4.WITHPRIMARYKEY

5.ASSELECT * FROM emp@remote_db

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

[sql]view plaincopy

1.CREATEMATERIALIZEDVIEWLOGON emp;

1.CREATEMATERIALIZEDVIEWLOGON emp;

--Rowid物化视图示例:

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

[sql]view plaincopy

1.CREATEMATERIALIZEDVIEW mv_emp_rowid

2.REFRESHWITHROWID

3.ASSELECT * FROM emp@remote_db;

4.Materializedviewlog created.

1.CREATEMATERIALIZEDVIEW mv_emp_rowid

2.REFRESHWITHROWID

3.ASSELECT * FROM emp@remote_db;

4.Materializedviewlog created.

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

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

1.CREATEMATERIALIZEDVIEW mv_empdept

2.ASSELECT * FROM emp@remote_db e

3.WHEREEXISTS

4.(SELECT * FROM dept@remote_db d

5.WHEREe.dept_no = d.dept_no)

1.CREATEMATERIALIZEDVIEW mv_empdept

2.ASSELECT * FROM emp@remote_db e

3.WHEREEXISTS

4.(SELECT * FROM dept@remote_db d

5.WHEREe.dept_no = d.dept_no)

1.4.2 刷新时间

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

[sql]view plaincopy

1.CREATEMATERIALIZEDVIEW mv_emp_pk

2.REFRESHFAST

3.STARTWITHSYSDATE

4.NEXT SYSDATE + 2

5.WITHPRIMARYKEY

6.ASSELECT * FROM emp@remote_db;

1.CREATEMATERIALIZEDVIEW mv_emp_pk

2.REFRESHFAST

3.STARTWITHSYSDATE

4.NEXT SYSDATE + 2

5.WITHPRIMARYKEY

6.ASSELECT * FROM emp@remote_db;

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

[sql]view plaincopy

1.creatematerializedviewMV_LVY_LEVYDETAILDATA

2.TABLESPACE ZGMV_DATA --保存表空间

3.BUILDDEFERRED--延迟刷新不立即刷新

4.refreshforce--如果可以快速刷新则进行快速刷新,否则完全刷新

5.ondemand--按照指定方式刷新

6.startwith to_date('24-11-200518:00:10', 'dd-mm-yyyyhh24:mi:ss') --第一次刷新时

7.nextTRUNC(SYSDATE+1)+18/24--刷新时间间隔

8.as

9.SELECT * FROM emp@remote_db;

1.creatematerializedviewMV_LVY_LEVYDETAILDATA

2.TABLESPACE ZGMV_DATA --保存表空间

3.BUILDDEFERRED--延迟刷新不立即刷新

4.refreshforce--如果可以快速刷新则进行快速刷新,否则完全刷新

5.ondemand--按照指定方式刷新

6.startwith to_date('24-11-200518:00:10', 'dd-mm-yyyyhh24:mi:ss') --第一次刷新

时间

7.nextTRUNC(SYSDATE+1)+18/24--刷新时间间隔

8.as

9.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,来建立不同等级的聚集物化视图。

相关内容参考:

Oracle 物化视图日志与快速刷新说明

https://www.wendangku.net/doc/7d11469294.html,/tianlesoftware/article/details/7720580

Oracle 物化视图详细错误描述查看方法

https://www.wendangku.net/doc/7d11469294.html,/tianlesoftware/article/details/7719789

Oracle 物化视图快速刷新限制说明

https://www.wendangku.net/doc/7d11469294.html,/tianlesoftware/article/details/7719679二.物化视图操作示例

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

[sql]view plaincopy

1.GRANT CREATE MATERIALIZED VIEW TO USER_NAME;

1.GRANT CREATE MATERIALIZED VIEW TO USER_NAME;

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

[sql]view plaincopy

1.CREATE MATERIALIZED VIEW LOG ON DAVE

2.TABLESPACE&BISONCU_SPACE -- 日志空间

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

1.CREATE MATERIALIZED VIEW LOG ON DAVE

2.TABLESPACE&BISONCU_SPACE -- 日志空间

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

3. 授权给中间用户

[sql]view plaincopy

1.GRANT SELECT ON DAVE TO ANQING;

2.GRANT SELECT ON MLOG$_DAVE TO ANQING;

1.GRANT SELECT ON DAVE TO ANQING;

2.GRANT SELECT ON MLOG$_DAVE TO ANQING;

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

[sql]view plaincopy

1.CREATE MATERIALIZED VIEW AICS_DAVE

2.TABLESPACE&BISONCS_SPACE

3.REFRESH FAST

4.ON DEMAND

5.--第一次刷新时间

6.--START WITH to_date('2012-01-01 20:00:00', 'yyyy-mm-dd hh24:mi:ss')

7.START WITH SYSDATE

8.--刷新时间间隔。每1天刷新一次,时间为凌晨2点

9.--NEXT TRUNC(SYSDATE,'dd')+1+2/24

10.NEXT SYSDATE+1/24/20

11.WITH PRIMARY KEY

12.--USING DEFAULT LOCAL ROLLBACKSEGMENT

13.DISABLE QUERY REWRITE AS

14.SELECT MODEL_ID, STATUS,MODEL_NAME, MANU_ID, DESCRIPTION, CREATE_TIME,

UPDATE_TIME, SW_VERSION

15.FROM AICS_DAVE@LINK_DAVE;

1.CREATE MATERIALIZED VIEW AICS_DAVE

2.TABLESPACE&BISONCS_SPACE

3.REFRESH FAST

4.ON DEMAND

5.--第一次刷新时间

6.--START WITH to_date('2012-01-01 20:00:00', 'yyyy-mm-dd hh24:mi:ss')

7. START WITH SYSDATE

8.--刷新时间间隔。每1天刷新一次,时间为凌晨2点

9.--NEXT TRUNC(SYSDATE,'dd')+1+2/24

10.NEXT SYSDATE+1/24/20

11.WITH PRIMARY KEY

12.--USING DEFAULT LOCAL ROLLBACKSEGMENT

13.DISABLE QUERY REWRITE AS

14.SELECT MODEL_ID, STATUS,MODEL_NAME, MANU_ID, DESCRIPTION, CREATE_TIME, UPDAT

E_TIME, SW_VERSION

15.FROM AICS_DAVE@LINK_DAVE;

5. 在目标物化视图上创建索引

[sql]view plaincopy

1.CREATE INDEX IDX_T_DV_CT

2.ON AICS_DEV_INFO (CREATE_TIME, UPDATE_TIME)

3.TABLESPACE &BISON_IDX;

4.

5.CREATE INDEX IDX_T_DV_UT

6.ON AICS_DEV_INFO (UPDATE_TIME)

7.TABLESPACE &BISON_IDX;

8.

9.CREATE INDEX I_T_DV_MSISDN

10.ON AICS_DEV_INFO (MSISDN)

11.TABLESPACE &BISON_IDX;

1.CREATE INDEX IDX_T_DV_CT

2.ON AICS_DEV_INFO (CREATE_TIME, UPDATE_TIME)

3. TABLESPACE &BISON_IDX;

4.

5.CREATE INDEX IDX_T_DV_UT

6.ON AICS_DEV_INFO (UPDATE_TIME)

7. TABLESPACE &BISON_IDX;

8.

9.CREATE INDEX I_T_DV_MSISDN

10.ON AICS_DEV_INFO (MSISDN)

11. TABLESPACE &BISON_IDX;

6. 物化视图刷新说明

(1)使用dbms_mview.refresh 手工刷新

如:

[sql]view plaincopy

1.EXEC DBMS_MVIEW.REFRESH('MV_DAVE');

2.

3.--完全刷新

4.EXEC DBMS_MVIEW.REFRESH(LIST => 'MV_DAVE',METHOD => 'c');

5.EXEC DBMS_MVIEW.REFRESH('MV_DAVE','C');

6.

7.--快速刷新

8.EXEC DBMS_MVIEW.REFRESH(LIST => 'MV_DAVE',METHOD => 'f');

9.EXEC DBMS_MVIEW.REFRESH('MV_DAVE','F');

1.EXEC DBMS_MVIEW.REFRESH('MV_DAVE');

2.

3.--完全刷新

4.EXEC DBMS_MVIEW.REFRESH(LIST => 'MV_DAVE',METHOD => 'c');

5.EXEC DBMS_MVIEW.REFRESH('MV_DAVE','C');

6.

7.--快速刷新

8.EXEC DBMS_MVIEW.REFRESH(LIST => 'MV_DAVE',METHOD => 'f');

9.EXEC DBMS_MVIEW.REFRESH('MV_DAVE','F');

(2)使用dbms_refresh.refresh 过程来批量刷新MV

如果我们在创建物化视图的过程指定start 和next time的刷新时间,那么Oracle 会自动创建刷新的job,并采用dbms_refresh.refresh 的方式。

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

Refreshmake 的语法可以参考:

https://www.wendangku.net/doc/7d11469294.html,/cd/B19306_01/server.102/b14227/rarrefreshpac.htm#i94057

示例:

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

[sql]view plaincopy

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

SYSDATE, 'SYSDATE+ 1')

2.

3.--刷新整个refresh group 组:

4.SQL> EXEC DBMS_REFRESH.REFRESH('REP_TEST')

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

TE+ 1')

2.

3.--刷新整个refresh group 组:

4.SQL> EXEC DBMS_REFRESH.REFRESH('REP_TEST')

7. 删除物化视图及日志

[sql]view plaincopy

1.--删除物化视图日志:

2.DROP MATERIALIZED VIEW LOG ON DAVE;

3.--删除物化视图

4.DROP MATERIALIZED VIEW MV_DAVE;

1.--删除物化视图日志:

2.DROP MATERIALIZED VIEW LOG ON DAVE;

3.--删除物化视图

4.DROP MATERIALIZED VIEW MV_DAVE;

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

1.SQL> SELECT MVIEW_NAME, LAST_REFRESH_DATE, STALENESS FROMUSER_MVIEWS;

2.SQL> SELECT NAME, LAST_REFRESH FROM USER_MVIEW_REFRESH_TIMES;

1.SQL> SELECT MVIEW_NAME, LAST_REFRESH_DATE, STALENESS FROMUSER_MVIEWS;

2.SQL> SELECT NAME, LAST_REFRESH FROM USER_MVIEW_REFRESH_TIMES;

9. 查询物化视图日志:

[sql]view plaincopy

1.SELECT * FROM MLOG$_DAVE;

物化视图

ORACLE中的物化(实体)视图 物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。 物化视图可以查询表,视图和其它的物化视图。 通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。 对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。 对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。 本篇我们将会看到怎样创建物化视图并且讨论它的刷新选项。 在复制环境下,创建的物化视图通常情况下主键,rowid,和子查询视图。 1.主键物化视图: 下面的语法在远程数据库表emp上创建主键物化视图SQL> CREATE MATERIALIZED VIEW mv_emp_pk REFRESH FAST START WITH SYSDATE 1/48 + NEXT SYSDATE WITH PRIMARY KEY

AS SELECT * FROM emp@remote_db; created. view Materialized 注意:当用FAST选项创建物化视图,必须创建基于主表的视图日志,如下: SQL> CREATE MATERIALIZED VIEW LOG ON emp; Materialized view log created. 2.Rowid物化视图 下面的语法在远程数据库表emp上创建Rowid物化视图SQL> CREATE MATERIALIZED VIEW mv_emp_rowid WITH ROWID REFRESH AS SELECT * FROM emp@remote_db; Materialized view log created. 3.子查询物化视图 下面的语法在远程数据库表emp上创建基于emp和dept表的子查询物化视图 SQL> CREATE MATERIALIZED VIEW mv_empdept AS SELECT * FROM emp@remote_db e EXISTS WHERE (SELECT * FROM dept@remote_db d WHERE e.dept_no = d.dept_no) Materialized view log created. REFRESH 子句

第六章视图分析

第六章视图 1.概述 ?视图(View)是从一个或多个表(其他视图)中导出的表,其结构和数据是建立在对表的查询基础之上的。所以视图不是真实存在的基础表, 而是一张虚表。视图所对应的数据并不实际地以视图结构存储在数据库 中,而是存储在视图所引用的表中。 ?视图一经定义便存储在数据库中,与其相对应的数据并没有像表一样在数据库中另外存储一份,通过视图看到的数据只是存放在基表中的数据。 对视图的操作与对表的操作一样,可以对其进行查询、修改(有一定的 限制)和删除。 ?当对视图中的数据进行修改时,相应的基表的数据也要发生变化,同时,如果基表的数据发生变化,则这种变化也可以自动地反映到视图中 2.视图的特点 1.视点集中,减少对象大小 视图让用户能够着重于他们所需要的特定数据或所负责的特定要求,如 用户可以选择特定行或特定列。 2.从异构源组织数据 可以在连接两个或多个表的复杂查询的基础上创建视图,这样可以将单 个表显示给用户。 3.隐藏数据的复杂性,简化操作 视图向用户隐藏了数据库设计的复杂性,这样如果开发者改变数据库设 计,不会影响到用户与数据库交互。另外,用户可将经常使用的连接查 询、嵌套查询或联合查询定义为视图。 4.简化用户权限的管理 可以将视图的权限授予用户,而不必将基表中某些列的权限授予用户, 这样就简化了用户权限的定义。 3.视图的四种类型 ?关系视图: 关系视图(relational view)基本上就是经过存储的查询,可以将它的输出看作是 一个表。它就是基于关系数据的存储对象。 ?内嵌视图: 又称为嵌套查询,是嵌入到父查询中的查询,能够在任何可以使用表名称的地 方使用。 ?对象视图: 为了迎合数据库中对象类型而将关系表投射到特定数据类型的虚拟对象表中, 视图的每行都是带有属性、方法和唯一标识(OID)的对象实例。 ?物化视图: 就是在数据库中查询结果存储在视图中,并支持查询重写、刷新、提交等特性 的视图 4.视图的创建及管理

Oracle物化视图创建全过程

Oracle物化视图创建全过程 我们如果遇到需要从其它系统的数据库中取数据进行统计分析的问题,可疑选择使用ORACLE的ODI工具进行抽数,但是对方提供的数据库用户下没有任何对象,只是有查询所有表的权限,因此无法做数据反向。 于是决定使用物化视图,把对方数据库中的数据拿过来,虽然数据量比较大,但是每月只拿一次,而且如果设置成增量更新,也不会太慢。现在记录下物化视图的创建过程(以一张表为例)。 一、准备条件以及备注 假设双方数据库都是ORACLE10g,需要同步过来的表名叫:GG_ZLX_ZHU,对方数据库用户名:username,密码:password,SID:CPEES。 二、开始干活 1、首先要创建DB_LINK CREATE DATABASE LINK to_cpees CONNECT TO "username" identified by "password" using "CPEES"; 或者 create database link to_cpees connect to username identified by "password" using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST =IP地址)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = cti) ) )'; 其中CPEES为新建的到对方数据库的TNS。执行,现在我们就已经创建了到对方数据库的DB_LINK TO_CPEES。 2、创建Oracle物化视图快速刷新日志 因为上面说过,以后视图的刷新将采用增量刷新的方式,因此,为配合增量刷新,ORACLE要求要在住表上建立物化视图日志。 CREATE MATERIALIZED VIEW LOG ON GG_ZLX_ZHU WITH PRIMARY KEY INCLUDING NEW VALUES; (上面的SQL要在远程数据库上执行,不能在本地执行) 3、创建Oracle物化视图 Oracle物化视图,从名字上面来开,它应该是属于视图,但是确实物化。 其物化是针对普通视图并没有真正的物理存储而言,其实可以简单的把物化视图看做一个物理表。

物化视图BUG 导致CPU消耗超高

单击此项可添加到收藏夹 MATERIALIZED VIEW FAST REFRESH IS VERY SLOW, "AS OF SNAPSHOT" CURSORS NOT BEING SHARED (文档ID 1051346.1) 转到底部转到底部 In this Document Symptoms Cause Solution References Applies to: Oracle Database - Enterprise Edition - Version 10.1.0.5 to 11.2.0.2.0 [Release 10.1 to 11.2] Information in this document applies to any platform. Symptoms On a production database version 11.1.0.7, the fast refresh of a nested materialized view takes a lot of time comparing to the select statement used for the creation of the materialized view. The refresh of the mview takes approximately 16 min. The select statement itself finishes in about 8 seconds. It can be seen that most of the time is spent with the parse of update sys.sumpartlog$ statement. ******************************************************************************* * updatesys.sumpartlog$ s set s.timestamp = :1, s.scn = :2 where

物化视图

物化视图日志结构 物化视图的快速刷新要求基本必须建立物化视图日志,这篇文章简单描述一下物化视图日志中各个字段的含义和用途。 物化视图日志的名称为MLOG$_后面跟基表的名称,如果表名的长度超过20位,则只取前20位,当截短后出现名称重复时,Oracle 会自动在物化视图日志名称后面加上数字作为序号。 物化视图日志在建立时有多种选项:可以指定为ROWID、PRIMARY KEY和OBJECT ID几种类型,同时还可以指定SEQUENCE 或明确指定列名。上面这些情况产生的物化视图日志的结构都不相同。 任何物化视图都会包括的列: SNAPTIME$$:用于表示刷新时间。 DMLTYPE$$:用于表示DML操作类型,I表示INSERT,D表示DELETE,U表示UPDATE。 OLD_NEW$$:用于表示这个值是新值还是旧值。N(EW)表示新值,O(LD)表示旧值,U表示UPDATE操作。CHANGE_VECTOR$$表示修改矢量,用来表示被修改的是哪个或哪几个字段。 如果WITH后面跟了ROWID,则物化视图日志中会包含: M_ROW$$:用来存储发生变化的记录的ROWID。 如果WITH后面跟了PRIMARY KEY,则物化视图日志中会包含主键列。 如果WITH后面跟了OBJECT ID,则物化视图日志中会包含: SYS_NC_OID$:用来记录每个变化对象的对象ID。 如果WITH后面跟了SEQUENCE,则物化视图日子中会包含: SEQUENCE$$:给每个操作一个SEQUENCE号,从而保证刷新时按照顺序进行刷新。 如果WITH后面跟了一个或多个COLUMN名称,则物化视图日志中会包含这些列。 下面通过例子进行详细说明: SQL> create table t_rowid (id number, name varchar2(30), num number);

oracle物化视图同步

1.目标服务器A,数据库oracle,待同步数据表city,用户hnjcfx,口令hnjcfx 2.同步服务器B,数据库oracle,需要同步A中city表数据,服务名192(参见tnsnames.ora文件中配置,按照格式需自己配置) 192 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.192)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = fantlam) ) ) 注:HOST 为目标服务器IP地址 Fantlam为目标服务器数据库实例名 3.登录B数据库,在Boracle数据库中创建连接Aoracle数据库的连接名testlk:Create public database link testlk connect to hnjcfx identified by hnjcfx using ‘192’ 注:目标方数据库(A)的init.ora文件中的global_names设为false。 创建数据库链接的帐号(B)必须有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系统权限,用来登录到远程数据库的帐号(hnjcfx)必须有CREATE SESSION权限。这两种权限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK权限在DBA中)。 4.在A数据库中创建存储日志视图 Create materialized view log on city 5.在B 数据库中创建物化视图city create materialized view city refresh force on demand with rowid START WITH TO_DATE('08-12-2008 16:40:00','dd-mm-yyyy hh24:mi:ss') NEXT SYSDATE+1/(24*60)as SELECT * from city@testlk; 注:如果24小时同步刷新数据改动SYSDATE+1 6.B数据库中city视图是由A同步来的,只可以做查询操作,无增改删操作。

物化视图PPT

SQL> CREATE MATERIALIZED VIEW 2> depart_sal_sum as 3> select d.department_name, sum(e.salary) 4> from departments d, employees e 5> where d.department_id = e.department_id 6> group by d.department_name; SQL> CREATE MATERIALIZED VIEW 2> depart_sal_sum as 3> select d.department_name, sum(e.salary) 4> from departments d, employees e 5> where d.department_id = e.department_id 6> group by d.department_name;

?刷新一个到多个基表的物化视图 DBMS_MVIEW.REFRESH (’CUST_SALES ’, parallelism => 10);DBMS_MVIEW.REFRESH (’CUST_SALES ’, parallelism => 10);DBMS_MVIEW.REFRESH_DEPENDENT DBMS_MVIEW.REFRESH_DEPENDENT((’SALES ’);DBMS_MVIEW.REFRESH_DEPENDENT (’SALES ’);DBMS_MVIEW.REFRESH_ALL_MVIEWS DBMS_MVIEW.REFRESH_ALL_MVIEWS; ;DBMS_MVIEW.REFRESH_ALL_MVIEWS ;

物化视图使用详解

一.物化视图概述 Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。 物化视图可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。 物化视图可以查询表,视图和其它的物化视图。 通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。 对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。 对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。 在复制环境下,创建的物化视图通常情况下主键,rowid,和子查询视图。 物化视图由于是物理真实存在的,故可以创建索引。 1.1 物化视图可以分为以下三种类型 (1)包含聚集的物化视图; (2)只包含连接的物化视图; (3)嵌套物化视图。 三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大。创建物化视图时可以指定多种选项,下面对几种主要的选择进行简单说明: (1)创建方式(BuildMethods):包括BUILD IMMEDIATE和BUILD DEFERRED两种。

物化视图日志简介

oracle物化视图日志结构 物化视图的快速刷新要求基本必须建立物化视图日志,这篇文章简单描述一下物化视图日志中各个字段的含义和用途。 物化视图日志的名称为MLOG$_后面跟基表的名称,如果表名的长度超过20位,则只取前20位,当截短后出现名称重复时,Oracle会自动在物化视图日志名称后面加上数字作为序号。 物化视图日志在建立时有多种选项:可以指定为ROWID、PRIMARY KEY和OBJECT ID 几种类型,同时还可以指定SEQUENCE或明确指定列名。上面这些情况产生的物化视图日志 的结构都不相同。 任何物化视图都会包括的4列: SNAPTIME$$:用于表示刷新时间。 DMLTYPE$$:用于表示DML操作类型,I表示INSERT,D表示DELETE,U表示UPDATE。OLD_NEW$$:用于表示这个值是新值还是旧值。N(EW)表示新值,O(LD)表示旧值,U 表示UPDATE操作。 CHANGE_VECTOR$$:表示修改矢量,用来表示被修改的是哪个或哪几个字段。 如果WITH后面跟了ROWID,则物化视图日志中会包含:M_ROW$$:用来存储发生变化的记录的ROWID。 如果WITH后面跟了PRIMARY KEY,则物化视图日志中会包含主键列。 如果WITH后面跟了OBJECT ID,则物化视图日志中会包含:SYS_NC_OID$:用来记录每个变化对象的对象ID。 如果WITH后面跟了SEQUENCE,则物化视图日子中会包含:SEQUENCE$$:给每个操作一个SEQUENCE号,从而保证刷新时按照顺序进行刷新。 如果WITH后面跟了一个或多个COLUMN名称,则物化视图日志中会包含这些列。 下面通过例子进行详细说明: SQL> create table t_rowid (id number, name varchar2(30), num number); 表已创建。 SQL> create materialized view log on t_rowid with rowid, sequence (name, num) including new values; 实体化视图日志已创建。 SQL> create table t_pk (id number primary key, name varchar2(30), num number); 表已创建。 SQL> create materialized view log on t_pk with primary key; 实体化视图日志已创建。

materialized view(物化视图)基础知识

materialized view(物化视图)基础知识 1物化视图概念 物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。 物化视图可以查询表,视图和其它的物化视图。 通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。 对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。 对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。 本篇我们将会看到怎样创建物化视图并且讨论它的刷新选项。 在复制环境下,创建的物化视图通常情况下主键,rowid,和子查询视图。 1.1主键物化视图: 下面的语法在远程数据库表emp上创建主键物化视图 SQL> CREATE MATERIALIZED VIEW mv_emp_pk REFRESH FAST START WITH SYSDATE NEXT SYSDATE + 1/48 WITH PRIMARY KEY AS SELECT * FROM emp@remote_db; Materialized view created. 注意:当用FAST选项创建物化视图,必须创建基于主表的视图日志,如下: SQL> CREATE MATERIALIZED VIEW LOG ON emp; Materialized view log created.2.Rowid物化视图

下面的语法在远程数据库表emp上创建Rowid物化视图 SQL> CREATE MATERIALIZED VIEW mv_emp_rowid REFRESH WITH ROWID AS SELECT * FROM emp@remote_db; Materialized view log created. 3.子查询物化视图 下面的语法在远程数据库表emp上创建基于emp和dept表的子查询物化视图 SQL> CREATE MATERIALIZED VIEW mv_empdept AS SELECT * FROM emp@remote_db e WHERE EXISTS (SELECT * FROM dept@remote_db d WHERE e.dept_no = d.dept_no) Materialized view log created. REFRESH 子句[refresh [fast|complete|force] [on demand | commit] [start with date] [next date] [with {primary key|rowid}]] Refresh选项说明: a. oracle用刷新方法在物化视图中刷新数据. b. 是基于主键还是基于rowid的物化视图 c. 物化视图的刷新时间和间隔刷新时间

用友oracle物化视图实现数据同步

ORACLE物化视图 实现数据同步简介 NC57新增双引擎查询功能,以下报表支持此功能: 财务: 总账—辅助余额表 总账—辅助明细账 总账—辅助属性余额表 总账—多维分析表 应收—余额表 应收—应收账龄分析 应付—余额表 应付—应付账龄分析 供应链: 采购管理—供应商暂估余额表 销售管理—综合日报 库存管理—收发存汇总表 库存管理—出入库流水账 存货核算—收发存汇总表 存货核算—入库汇总表 存货核算—出库汇总表

本功能只支持oracle数据库。要使用此功能,需要在oracle 数据库上按以下步骤进行配置。 一、按照NC标准创建一个oracle空用户,假设为nc57des(以下称为目标用户) 二、使用该空用户创建到NC数据库的数据库链接,假设NC数据库用户为nc57(以下称为 源用户) Create database link dblink connect to nc57 identified by密码using ora10g_127.0.0.1; 需要注意:如果源用户和目标用户未在同一台数据库服务器上,则在目标数据库服务器上的tnsnames.ora中已经配置了源用户所在数据库服务器,本例假设源用户和目标用户在同一台服务器上。 三、在源用户上执行以下sql: 1、对于已定义主键的表,分别执行以下sql: create materialized view log on 表名with primary key; 2、对于未定义主键的表,分别执行以下sql: create materialized view log on 表名with rowid; 四、在目标用户上执行以下sql: 1、对于已定义主键的表,分别执行以下sql: create materialized view 表名refresh fast start with sysdate next sysdate+10/1440 as select * from 表名@dblink; 以上假设为10分钟同步一次,可以根据需要进行修改同步的频率,单位为“分钟” 2、对于未定义主键的表,分别执行以下sql: create materialized view 表名refresh fast with rowid start with sysdate next sysdate+10/1440 as select * from表名@dblink; 以上假设为10分钟同步一次,可以根据需要进行修改同步的频率,单位为“分钟”

如何创建物化视图

1、创建方式(Build Methods):Build Immediate 和Build Deferred两种。Build Immediate 是在创建物化视图的时候就生成数据,而Build Deferred则在创建时不生成数据,以后根据需要再生成数据。默认为Build Immediate 。 2、查询重写(Query Rewrite):Enable Query Rewrite和Disable Query Rewrite两种。分别指出创建的物化视图是否支持查询重写。查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据。默认为Disable Query Rewrite。 3、刷新(Refresh):指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。刷新的模式有两种:On Demand和On Commit。On Demand指物化视图在用户需要的时候进行刷新,可以手工通过 DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新。On Commit指物化视图在对基表的DML操作提交的同时进行刷新。刷新的方法有四种:Fast 、Complete 、Force和Never。Fast 刷新采用增量刷新,只刷新自上次刷新以后进行的修改。Complete 刷新对整个物化视图进行完全的刷新。如果选择Force方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用Complete 的方式。Never 指物化视图不进行任何刷新。默认值是Force On Demand。 在建立物化视图的时候可以指定Order by 语句,使生成的数据按照一定的顺序进行保存。不过这个语句不会写入物化视图的定义中,而且对以后的刷新也无效。 4、物化视图日志:如果需要进行快速刷新,则需要建立物化视图日志。物化视图日志根据不同物化视图的快速刷新的需要,可以建立为RowID或Primary Key类型的。还可以选择是否包括Sequence、Including New Values 以及指定列的列表。 可以指明On PreBuild Table语句将物化视图建立在一个已经存在的表上。这种情况下,物化视图和表必须同名。当删除物化视图时,不会删除同名的表。这种物化视图的查询重写要求参数 Query_Rewrite_integerity必须设置为 trusted或者stale_tolerated。 5、物化视图可以进行分区。而且基于分区的物化视图可以支持分区变化跟踪(PCT)。具有这种特性的物化视图,当基表进行了分区维护操作后,仍然可以进行快速刷新操作。对于聚集物化视图,可以在Group by 列表中使用Cube或RollUp,来建立不同等级的聚集物化视图。

【IT专家】创建Oracle物化视图,每5分钟刷新一次使用物化视图日志

本文由我司收集整编,推荐下载,如有疑问,请与我司联系创建Oracle物化视图,每5分钟刷新一次使用物化视图日志创建Oracle物化视图,每5分钟刷新一次使用物化视图日志[英]Create Oracle Materialized View to be refreshed every 5 minute Using materialized view log I’m Trying to create Materialized View which will be updated every 5 minute automatically, I need update based on Mview log table. ?我正在尝试创建物化视图,它将每5分钟自动更新一次,我需要基于Mview日志表进行更新。 I have created Materialized view log on TABLE1 TABLE1.SQL Script ?我在TABLE1 TABLE1.SQL脚本上创建了Materialized视图日志 ?CREATE MATERIALIZED VIEW LOG ON TABLE1; -- MLOG$_TABLE1 Then I’ve created Materialized View ?然后我创建了物化视图 ?CREATE MATERIALIZED VIEW JIBO_MVIEW REFRESH START WITH SYSDATE NEXT SYSDATE +5/24/60 ENABLE QUERY REWRITE AS SELECT O.ID ,O.DATETIME_CREATED ,O.ORIGINATOR ,O.DETAILS ,O.PAYMENT_REF FROM TABLE1 O WHERE O.ORIGINATOR LIKE ‘53%’; after changing some value In TABLE1, new Record is inserted MLOG$_TABLE1 log table ?更改一些值后在TABLE1中,新的Record插入了MLOG $ _TABLE1日志表 ? but changed value is not updated in Materialized view (JIBO_MVIEW). (even after one day :) ) ?但在物化视图(JIBO_MVIEW)中未更新更改的值。(纵然一天后:)) As I checked in Alert Log there is problem with auto generated DBMS_JOB, it fails on every executions. ?当我检查警报日志时,自动生成的DBMS_JOB存在问题,每次执行都会失败。 ?- ORA-12012: error on auto execute of job 4263 - ORA-00942: table or view does not

物化视图的创建和快速刷新

物化视图的创建和快速刷新 1.物化视图简介 物化视图,它是用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,从而快速的得到结果。物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL 语句的正确性和有效性; 物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。 其中物化视图有三种:聚集物化视图、包含连接物化视图、嵌套物化视图。但三种物化视图的快速刷新的限制条件有很大区别,而其他方面则区别不大。 2.物化视图的创建和参数说明 2.1 物化视图实例 南昌营运数据为5000万条左右,每日新增20w条左右。根据报表的实际需求,在物化视图中按照车牌,车队,天汇总统计 后的数据为80万条。这样大大提高了查询的效率。 创建物化视图的语句如下: create materialized view BUSINESS_DATA_CAR_MV BUILD DEFERRED –在创建时不刷新,按照用户设定的时间刷新 refresh force –如果可以快速刷新则进行快速刷新,否则进行完全刷新 on demand –按照指定的方式刷新

start with to_date('14-07-2011 13:41:16', 'dd-mm-yyyy hh24:mi:ss') --第一次刷新时间 next TRUNC(SYSDA TE+1)+ 2/24 --刷新时间间隔 as select to_char(date_up,'yyyy-MM-dd') as day, taxi_group, taxi_company, dispatch_car_no, service_no, sum(decode(sign(OYSTER_CARD_ORIGIN_SUM-OYSTER_CARD_LEFT_SUM),1,1,-1,0)) as cardTime, count(*) as times, sum(decode(sign(OYSTER_CARD_ORIGIN_SUM-OYSTER_CARD_LEFT_SUM),1,OYSTER_ CARD_ORIGIN_SUM-OYSTER_CARD_LEFT_SUM,-1,0)) as cardSum, sum(sum) as sum, sum(distance+free_distance)as total_distance, sum(decode(sign(distance),1,distance,-1,0,distance)) as distance, sum(free_distance) as free_distance, sum(decode(sign(date_down-date_up),1,(date_down-date_up)*24,-1,0)) as workTime, sum(waiting_hour*60+waiting_second)as waiting_time, sum(decode(to_char(date_up,'HH24'),'02',1,'03',1,'04',1,0))as overTimeTimes, from SINGLE_BUSINESS_DA TA_BS bus where date_up <= date_down and(date_down -date_up ) <0.5 and distance>=0 and distance<100 and free_distance<500 group by service_no,dispatch_car_no,to_char(date_up,'yyyy-MM-dd'),taxi_group,taxi_company;, 2.2参数介绍 2.2.1 BUILD BUILD IMMEDIATE :是在创建物化视图的时候就生成数据,。 BUILD DEFERRED :则在创建时不生成数据,以后根据需要在生成数据。 默认为BUILD IMMEDIATE。

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属性 (刷新方式 )

最新数据库复习-专升本附答案(EK-绝密版)

一、题型及分值 1、填空题(10小题,10分) 2、选择题(10小题,20分) 3、问答与分析题(4小题,30分) 4、综合题(2小题,40分) 二、知识要点 (一)关系模型的基本概念 【例1】学生社团可以接纳多名学生参加,但每个学生只能参加一个社团,从社团到学生之间的联系类型是_____________。 【例2】层次模型不能直接表示()。 A.1:1联系 B.1:n联系 C.m:n联系 D.1:1和1:n联系 【例3】在三大传统的数据模型中,具有严格的数学理论基础的是________模型。 【例4】数据库的数据独立性包括逻辑独立性和___________。 (二)关系代数运算 【例1】五种基本关系代数运算是( A )。 A.∪,-,×,π和σ B.∪,-,∞,π和σ C.∪,∩,×,π和σ D.∪,∩,∞,π和σ 【例2】在关系代数中,除法运算由基本运算符( C )组成。 A、∪,-,π和σ B、-,∞和π C、-,×和π D、∪,∞,π和σ 【例3】设关系R和S,R∩S的运算等价于( B )。 A.S-(R-S) B.R-(R-S) C.(R-S)∪S D.R∪(R-S) 【例4】在关系代数中,连接运算∞由基本运算符( C )组成。 A、∪,-,π和σ B、-和π C、×和σ D、∪,π和σ 【例5】设关系R和S的属性个数分别为r和s,则(R×S)操作结果的属性个数为_________,元组个数为___________。 【例6】设有如下关系:

关系代数表达式R÷S的运算结果是______________。 【例7】已知有如下三个关系 STUDENT(学号,姓名,性别,年龄,专业) GRADE (学号,课程号,成绩) COURSE(课程号,课程名,学分,课时) 现有如下表达式: π学号,姓名(STUDENT)(π学号,课程号(GRADE) ÷π课程号(COURSE)))。 请用汉语句子写出该表达式表达的查询,并写出与该表达式对应的SQL语句。 答:(1)选修了全部课程的学生的学号和姓名。 (2)select sno,sname From student Where not exists (select * From course Where not exists (select * From sc Where sno = student.sno and cno=https://www.wendangku.net/doc/7d11469294.html,o)) (三)数据库的完整性 1、关系的三类完整性约束。 2、触发器。 【例1】关系模式的三类完整性约束条件分别是______________、参照完整性约束和用户定义完整性约束。 【例2】在SQL Server中,在视图上可以定义_________类型的触发器。 【例3】试举例说明在视图上创建instead of 触发器能够使得视图具备可更新功能。 答:如果一个视图涉及到计算列,那么该视图为不可更新视图。 /*创建books表*/ create table books ( bookKey int identity(1,1), bookName nvarchar(10) not null, Color nvarchar(10) not null, ComputedCol as (bookName + Color), Pages int

Oracle物化视图语法

Oracle物化视图语法 物化视图概述: Oracle的物化视图提供了强大的功能,可以用在不同的环境中。在不同的环境中,物化视图的作用也不相同。数据仓库中的物化视图主要用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。在数据仓库中,还经常使用查询重写(query rewrite)机制,这样不需要修改原有的查询语句,Oracle会自动选择合适的物化视图进行查询,完全对应用透明。物化视图和表一样可以直接进行查询。物化视图可以基于分区表,物化视图本身也可以分区。除了在数据仓库中使用,物化视图还用于复制、移动计算等方面。物化视图在很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。 物化视图语法: create materialized view materialized_view_name build [immediate|deferred] --1.创建方式 refresh [complete|fast|force|never] --2.物化视图刷新方式 on [commit|demand] --3.刷新触发方式 start with (start_date) --4.开始时间 next (interval_date) --5.间隔时间 with [primary key|rowid] --默认 primary key ENABLE QUERY REWRITE --7.是否启用查询重写 as --8.关键字 select statement; --9.基表选取数据的select语句 1.创建方式默认是immediate,立即;deferred,延迟,至第一次refresh时,才生效。 2.物化视图刷新方式默认为force,意思是:如果可以快速刷新,就执行快速刷新;否则,执行完全刷新。 complete,完全刷新,即,刷新时更新全部数据,包括视图中已经生成的原有数据。 fast,快速刷新,只刷新增量部分。前提是,需要在基表上创建物化视图日志(见示例)。该日志记录基表数据变化情况,所以才能实现增量刷新。 never,从不刷新。 3.on commit,基表有commit动作时,刷新视图,不能跨库执行(因为不知道别的库的提交动作);on demand,在需要时刷新,即,根据后面设定的起始时间和时间间隔进行刷新,或者,手动调用dbms_mview包中的过程刷新时再执行刷新。4和5.即开始刷新时间和下次刷新的时间间隔。如:start with sysdate next sysdate+1/1440表示马上开始,刷新间隔为1分钟。(与 on commit选项冲突)6.基于基表的主键或者rowid创建。如果是基于rowid,不能对基表执行分组函

相关文档