物化视图存储基于远程表的数据,也可称为快照,是远程数据的本地副本,或者用来生成基于数据表求和的汇总表
通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)
对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的
如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取
物化视图把他的物理结构存储在自己的段中,该段可以被索引和分区
查询不必完全匹配用来创建物化视图的 SQL 语句,优化程序可以动态重写一个与原定义相近的查询
⑴ 使用物化视图前的几个配置步骤
使用一个物化视图,用户只需在基表上拥有权限即可
① 确定那些语句要创建物化视图
② 决定是否要保持视图与基表数据同步
如果不同步,可选择如下三种刷新方式:
COMPLETE:刷新启动时,先 truncate 物化视图,再从基表重新物化数据
FAST:只刷新基表上次刷新后改变的数据,使用视图的日志数据或ROWID完成
FORCE:默认的方式,先使用FAST,不行就使用COMPLETE方式
③ 设置 init.ora 的参数
JOB_QUEUE_PROCESSES,必须设置大于 1
QUERY_REWRITE_ENABLED,设置为 TRUE 时,允许动态重写查询
QUERY_REWRITE_INTEGRITY,确定访问物化视图时数据一致性要遵守的程度
OPTIMIZER_MODE,必须设置成 CBO 的某种方式
⑵ 创建物化视图
案例:
hr@ORCL> create materialized view mv_t
2 tablespace users
3 build immediate
4 refresh complete --如果需要进行快速刷新,则需要建立实体化视图日志
5 enable query rewrite
6 as
7 select * from t;
Materialized view created.
注释:
① refresh [fast|complete|force] 视图刷新的方式
fast: 增量刷新。假设前一次刷新的时间为t1,那么使用fast模式刷新物化视图时,只向视图中添加t1到当前时间段内
基表变化过的数据,为了记录这种变化,建立增量刷新物化视图还需要一个物化视图日志表
create materialized view log on (主表名);
complete:全部刷新。相当于重新执行一次创建视图的查询语句
force: 这是默认的数据刷新方式。当可以使用fast模式时,数据刷新将采用fast方式;否则使用complete方式
② MV 数据刷新的时间
on demand:在用户需要刷新的时候刷新,这里就要求用户自己动手去刷新数据了(也可以使用job定时刷新)
on commit:当主表中有数据提交的时候,立即刷新 MV 中的数据
start ……:从指定的时间开始,每隔一段时间(由 next 指定)就刷新一次
③ Build immediate 一共有三个选项
Build immediate:建立物化视图,并使用当前命令执行的数据马上填充视图数据
Build deferred:只建立物化视图,在第一次刷新之间不填充数据
No prebuilt table,使用事先已存在的,已含有视图定义中有现有数据的表,而不是建立一个新结构来保存数据