Oracle实体化视图

1、减轻网络负担:通过MV将数据从一个数据库分发到多个不同的数据库上,通过对多个数据库访问来减轻对单个数据库的网络负担。

2、搭建分发环境:通过从一个中央数据库将数据分发到多个节点数据库,达到分发数据的目的。

3、复制数据子集:MV可以进行行级/列级的筛选,这样可以复制需要的那一部分数据。

create materialized view [view_name]

{TABLESPACE (表空间名)}              --保存表空间

{BUILD [DEFERRED|IMMEDIATE(默认值)]} --延迟刷新还是立即刷新

refresh [fast|complete|force]

[

on [commit|demand] |

start with (start_time) next (next_time)

]

as

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

相关参数说明:

1,

Build子句:定义创建方式,包括BUILD IMMEDIATE和BUILD DEFERRED两种

BUILD IMMEDIATE 在创建实体化视图的时候就生成数据,默认 BUILD IMMEDIATE

BUILD DEFERRED 在创建时不生成数据,以后根据需要在生成数据

2,

Refresh子句:定义数据同步刷新,当基表发生了DML操作后,实体化视图何时采用哪种方式和基表进行同步,语法:

[refresh [fast | complete | force]

[on demand | commit]

[start with date]

[next date]

[with {primary key | rowid}]

]

FAST 采用增量刷新,只刷新自上次刷新以后进行的修改,如果指定REFRESH FAST子句,那么应该对主表创建物化视图日志,如果没有建立MView Log的话要进行快速刷新的话会报错

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

COMPLETE 对整个物化视图进行完全的刷新

FORCE(默认) Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用Fast方式,否则采用Complete的方式,Force选项是默认选项

ON DEMAND(默认) 物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新

ON COMMIT 实体化视图在对基表的DML操作提交的同时进行刷新

START WITH 第一次刷新时间

NEXT 刷新时间间隔

WITH PRIMARY KEY(默认) 生成主键实体化视图,也就是说实体化视图是基于表的主键,而不是ROWID(对应于ROWID子句)。 为了生成PRIMARY KEY子句,应该在表上定义主键,否则应该用基于ROWID的实体化视图。主键实体化视图允许识别实体化视图表而不影响实体化视图增量刷新的可用性

WITH ROWID 只有一个单一的主表,不能包括下面任何一项:

●Distinct

●聚合函数

●Group by

●子查询

●连接

●SET操作

3,

Query Rewrite子句,定义查询重写

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

ENABLE QUERY REWRITE 支持查询重写

DISABLE QUERY REWRITE 不支持查询重写,默认DISABLE QUERY REWRITE

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

物化视图可以进行分区。而且基于分区的物化视图可以支持分区变化跟踪(PCT)。具有这种特性的物化视图,当基表进行了分区维护操作后,仍然可以进行快速刷新操作。

创建多表关联的实体化视图:

实体化视图包含多表关联,但不包含聚合操作,仅包含表关联的实体化视图同样支持在两种情况下刷新:

ON COMMIT 和 ON DEMAND。在 ON COMMIT 下,当基表发生DML操作并提交commit 的时候,实体化视图被刷新。

Oracle不允许实体化视图中有self-jions 的存在。

假如指定刷新方式为REFRESH FAST, oracle 执行附加的校验,以确定fast refresh能被执行。这些附加的检查包括:

1 每个基表下必须创建相应的 materialized view log

2 每个基表的rowid 必须在实体化视图的select 语句中出现

3 如果存在外联接,在where 子句不能有任何的selections.并且,所有的关联必须以AND 相连,并且用“=”操作符。

4 如果存在外联接,唯一性约束必须存在于外联的 inner table 的相关列中。

时间: 2024-08-24 03:42:49

Oracle实体化视图的相关文章

Oracle案例02——ORA-12034: "SCOTT"."USER_TABLE" 上的实体化视图日志比上次刷新后的内容新

最近同事在交接工作时,发现有几个schedule job没有执行成功,我这边给看了下,其中一个是由于数据库迁移,调用dblink的host主机IP在tnsnames中没有变更导致,还有一个是无法视图的报错,即报错信息如下: 一.错误日志 通过查看schedual job报错日志,具体报错信息如下 ORA-12034:"SCOTT"."USER_TABLE" 上的实体化视图日志比上次刷新后的内容新ORA-06512: 在 "SYS.DBMS_SNAPSHOT

云计算设计模式(十四)——实体化视图模式

云计算设计模式(十四)——实体化视图模式 产生过在一个或多个数据存储中的数据预填充的观点时,数据被格式化以不利于所需的查询操作的一种方式.这种模式可以帮助支持高效的查询和提取数据,并提高应用程序的性能. 背景和问题 何时存储数据时,优先级为开发者和数据管理员经常集中在如何将数据存储,而不是它是如何读出.所选择的存储格式通常是密切相关的数据,用于管理数据的大小和数据的完整性,并且在使用的那种存储的要求的格式.例如,使用的NoSQL文献商店时,该数据通常被表示为一系列的聚集体,其每一个包含了所有的信

oracle中普通视图和实体试图的区别

Oracle普通视图和实体化视图比较 来源:茂盛博客|2013-07-30 Oracle普通视图和实体化视图比较 相对于普通的视图来说,实体化视图的不同之处在于实体化视图管理存储数据,占据数据库的物理空间.实体化视图的结果会保存在一个普通的数据表中,在对实体化视图进行查询的时候不再会对创建实体化视图的基表进行查询,而是直接查询实体化视图对应的结果表,然后通过定期的刷新机制来更新MView表中的数据. 首先我们需要创建表,然后写一个 SELECT 语句 . SQL> create table xj

MATERIALIZED VIEW-物化视图

 Oracle的实体化视图提供了强大的功能,可以用在不同的环境中,实体化视图和表一样可以直接进行查询.实体化视图可以基于分区表,实体化视图本身也可以分区. 主要用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果.在数据仓库中,还经常使用查询重写(query rewrite)机制,这样不需要修改原有的查询语句,Oracle会自动选择合适的实体化视图进行查询,完全对应用透明.实体化视图和表一样可以直接进行查询. 实体化视图还用于

Oracle 11g R2 视图

视图是一个虚表,不占用物理空间,因为视图本身的定义语句存储在数据字典里.视图中的数据是从一个或多个实际的表中获得. 物化视图:也成实体化视图,含有实际数据,占用存储空间,在数据仓库中经常应用物化视图 创建视图的语法 CREATE [OR REPLACE] [FORCE |NO FORCE] VIEWview_name [(alias [,alias]..)] as select_statement [WITH CHECK_OPTION[CONSTRAINT constraint]] [WITH

【转】Oracle之物化视图

原文地址:http://www.cnblogs.com/Ronger/archive/2012/03/28/2420962.html 物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询.这样对整体查询性能的提高,并没有实质上的好处.1.物化视图的类型:ON DEMAND.ON COMMIT 二者的区别在于刷新方法的不同,ON DEMAND顾名思义,仅在该物化视

《oracle每天一练》Oracle之物化视图

相关帖子思考和跟踪 本文转自Ronger 物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询.这样对整体查询性能的提高,并没有实质上的好处.1.物化视图的类型:ON DEMAND.ON COMMIT 二者的区别在于刷新方法的不同,ON DEMAND顾名思义,仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性:

ORACLE V$lock视图TYPE,ID1,ID2取值的含义

在oracle v$lock视图中,下面对type,ID1,ID2三个列的具体含义说明下: TYPE   有TM,TX两种类型,TX为行级锁,事物锁,TM锁为表级锁 TYPE ID1 ID2 TM 被修改表的标识(object_id) 0 TX 以十进制数值表示该事务所占用的回滚段号与该事务在该回滚段的事务表(Transaction table)中所占用的槽号(slot number,可理解为记录号).其组成形式为: 0xRRRRSSSS ( RRRR = RBS number, SSSS =

[转]Oracle DB 性能视图和数据字典

动态性能视图 用于访问实例内存结构不断变化的状态信息. 在Oracle DB 中还维护着一个关于数据库实例操作和性能的动态数据集.这些动态性能视图以基于数据库服务器内部的内存结构构建的虚拟表为基础.也就是说,这些视图不是驻留在数据库中的传统意义上的表.这就是为什么部分视图在数据库装载或打开之前就能够使用的原因. 动态性能视图包含下列信息: ? 会话 ? 文件状态 ? 作业和任务的进度 ? 锁 ? 备份状态 ? 内存使用率和内存分配 ? 系统参数和会话参数 ?SQL 执行 ? 统计数据和度量 注: