存档
topMView重要视图
Oracle文档中MView相关视图的链接Materialized View and Refresh Group Views。
top在源数据库端的相关视图
topDBA_BASE_TABLE_MVIEWS
此视图与系统视图SYS.SLOG$相对应。
视图DBA_BASE_TABLE_MVIEWS记录了使用MView Log访问基表的相关刷新的信息。换句话说就是记录了使用了MView Log并且做过快速刷新的MView的信息,必须同时满足有MView Log以及做过快速刷新这两个条件,缺一不可。
| 列名 | 描述 |
|---|---|
| OWNER | 基表的OWNER |
| MASTER | 基表的名称 |
| MVIEW_LAST_REFRESH_TIME | 基于这个基表的MView最后的快速刷新的时间 |
| MVIEW_ID | 基于这个基表的MView在数据库中的ID,这个可以和DBA_REGISTERED_MVIEWS关联找出相应的MView的名称 |
- 备注:SYS.SLOG$的作用
- SYS.SLOG$记录了注册在源数据库端的能进行快速刷新的MView的信息。这个信息在进行快速刷新的时候会备用到,同时也会用来维护基表的MView Log信息。
作者:马齿苋 | 链接:http://www.dbabeta.com/2009/mview_step_by_step_06.html
top刷新组的基本概念
(本部分内容基本翻译自:Materialized View Concepts and Architecture,有问题请移步原文。)
top什么是刷新组
通常我们创建的MView会不止一个,而且各个MView的Master Table之间是有约束,数据一致性关联的,如果我们对各个MView分开刷新的话我们是不能保证关联数据的完整性和事务的一致性的。Oracle提供了刷新组来解决这个问题。在刷新组刷新之后Oracle可以保证在刷新组里面的所有的表在刷新的那个时间点的是一致的。
top刷新组的大小
Oracle专门针对大的MView刷新组做了优化,也就是说对于相同数量的MView来说一个大的刷新组要多个小的刷新组刷新的要快,即刷新的一个含有100个MView的刷新组要比刷新5个各含有20个MView的刷新组要快。
但是速度不是唯一的需要注意的问题,再决定一个刷新组大小的时候我们还需要考虑下面的这些问题:
- 数据的一致性
- 就像我们上面所说的,数据的完整性和事物的一致性是我们最需要考虑的问题,考虑大小之前先保证一致性。
- 表锁
- 再刷新组的刷新期间,所有的在组里面的表会被锁住而不让别的程序进行更新的操作,因为表的更新会破坏数据的一致性。这样就造成刷新组越大,表被锁的时间也就越长。因此针对这个来说越小的刷新组是越有利的。
- 网络的稳定性
- 如果在一个刷新组刷新完成之前网络终端的话将会导致整个组的刷新回滚,因此在网络不好的时候越大的刷新组是越不利的,我们需要根据网络的状况来调整我们的刷新组的大小。
作者:马齿苋 | 链接:http://www.dbabeta.com/2009/mview_step_by_step_05.html
topMView创建语法
MView的语法图示,来自Oracle Database SQL Reference

- ON PREBUILD TABLE
- 将已经存在的表注册为实体化视图。同时还必须提供描述创建该表的查询的 SELECT 子句。可能无法始终保证查询的精度与表的精度匹配。为了克服此问题,应该在规范中包含 WITH REDUCED PRECISION 子句。注意:这种方法不能用于以ROWID方式建立MVIEW,因为按照ROWID方式建立的ROWID所对应的表需要包含一个隐含的ROWID列。
- Build Clause
- 创建方式,决定是否在创建MV的时候生成数据。
阅读全文…
作者:马齿苋 | 链接:http://www.dbabeta.com/2009/mview_step_by_step_04.html
top前言
前面我们已经说了MView的一些基本知识,我们举得例子都是基于PK的MView,Oracle还支持其他方式的MView,基于ROWID的MView就是其中的一种。在这一部分将讨论如何建立基于ROWID的MView,同时分析下MView Log的结构。
top基于ROWID的MView
top基于ROWID MView的创建
还是先用一个例子开始:
USER@orcl> create table T4 (a int, b varchar(40));
Table created.
-- 建立一个MView,这是Oracle报错了
USER@orcl> create materialized view mvt4 as select * from t4;
create materialized view mvt4 as select * from t4
*
ERROR at line 1:
ORA-12014: table 'T4' does not contain a primary key constraint
作者:马齿苋 | 链接:http://www.dbabeta.com/2009/mview_step_by_step_03.html
top前言
现在我们通过一些例子来说明一下MView Log的基本结构以及MView快速刷新的过程。
在这一部分里面,我们还是利用上一部分提供的例子先建立一个MView,同时也创建该MView基表的MView Log。
USER@orcl> create table t (a int, b varchar2(50), constraint pk_t primary key(a));
Table created.
-- 创建对应的MV名为MVT
USER@orcl> create materialized view mvt as select * from t;
Materialized view created.
-- 现在往表里面插入一些个数据
USER@orcl> insert into t select rownum, object_name from all_objects;
11449 rows created.
USER@orcl> commit;
Commit complete.
-- 下面对mview做一次刷新看看
USER@orcl> exec dbms_mview.refresh('mvt');
PL/SQL procedure successfully completed.
-- 创建MView Log
USER@orcl> create materialized view log on t;
Materialized view log created.
-- 接下来就是进行快速刷新了
USER@orcl> exec dbms_mview.refresh('mvt', 'F');
PL/SQL procedure successfully completed.
作者:马齿苋 | 链接:http://www.dbabeta.com/2009/mview_step_by_step_02.html
top前言
- MView的两大应用方向
- 一是用于数据库的复制,这个在Oracle文档《Advanced Replication》中有详细的描述。
- 另一个是用于数据仓库,同样Oracle文档《Oracle Database Data Warehousing Guide》中也有详细的描述。
本系列文章以实例的方式一步步的说是什么是MView、MView的结构、MView的基本工作过程,以及MView的管理方法。
top几个术语的对应
- 基表
- 指的是英文里面的Master Table和Master Materialized View,并不只是只一个表,而是创建MView的时候所需要用到的n个表或者是相关的上一级的MView。
- MView
- 就是Materialized View了,物化视图。
- 源数据库端
- Master Site和Master Materialized View Site,指的是基表所在的数据库
- MView端
- Materialized View Site,MView所在的数据库
作者:马齿苋 | 链接:http://www.dbabeta.com/2009/mview_step_by_step_01.html
近期评论