(转)oracle 物化视图 总结

来源:互联网 发布:美团java面试题 编辑:程序博客网 时间:2024/05/23 00:02
可在报表组应用)

物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。
物化视图可以查询表,视图和其它的物化视图。主要用在数据仓库和决策支持系统。
通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。
对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。
对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。

物化视图把他的物理结构存储在自己的段中,该段可以被索引和分区。
查询不必完全匹配用来创建物化视图的SQL语句,优化程序可以动态重写一个与原定义相近的查询,以便物化视图用来代替实际的表,这种查询重写自动发生,对用户是透明的。(9.0.1 A89852-02的29章详述了跟踪是否使用了物化视图的过程)

 使用物化视图前的几个配置步骤
1)确定那些语句要创建物化视图。(Oracle Summary Advisor工具,9.0.1 A90237-01 第16章)
2)决定是否要保持视图与基础表数据同步。
如果不同步,可选择如下三种刷新方式:
- COMPLETE:刷新启动时,先truncate物化视图,再从基础表重新插入填充数据。
- FAST:只刷新基础表上次刷新以来改变了的数据。使用视图的日志数据或ROWID完成。
- FORCE:默认的方式。先使用FAST,不行就使用COMPLETE方式。
3)设置init.ora的参数:
- JOB_QUEUE_PROCESSES,必须设置大于 1。
- QUERY_REWRITE_ENABLED,设置为TRUE时,允许动态重写查询。
- QUERY_REWRITE_INTEGRITY,确定访问物化视图时数据一致性要遵守的程度。
- OPTIMIZER_MODE,必须设置成CBO的某种方式。

使用一个物化视图,用户只需在基础表上拥有权限即可。

 创建物化视图
SQL>create materialized view emp_by_district
Tablespace mview_data
Build immediate
Refresh fast
Enable query rewrite
As
Select d.id,count(e.last_name) from distributor dist,district d,employee e
Where e.id = dist.manager_id
And d.id dist.district_id
Group by d.id;

Build immediate一共有三个选项:
1) Build immediate:建立物化视图,并使用当前命令执行的数据马上填充视图数据。
2) Build deferred:只建立物化视图,在第一次刷新之间不填充数据。
3) No prebuilt table,使用事先已存在的,已含有视图定义中有现有数据的表,而不是建立一个新结构来保存数据。

如果是refresh fast on commit或refresh complete on commit创建的,则在基础表提交的时候都会得到刷新。

 启用或禁用物化视图,需要有query rewrite或global query rewrite权限。

 刷新物化视图
- 自动刷新
1) 使用commit选项。
2) 使用dbms_mview安排自动刷新时间。
- 手工刷新
SQL>execute dbms_mview.refresh(‘EMP_BY_DISTRICT’); --刷新指定的物化视图
SQL>execute dbms_mview.refresh_defresh_dependent(‘EMPLOYEE’);――刷新利用了该表的所有物化视图
SQL>execute dbms_mview.refresh_all_mviews;――刷新该模式中,自上次刷新以来,未得到刷新的所有物化视图。

 禁用物化视图
 - 修改init.ora参数的query_rewrite_enabled参数设置成flase,重启实例。
 - 使用alter system set query_rewrite_enabled = flase;动态修改。
 - 使用alter session set query_rewrite_enabled = flash;修改会话内。
 - 使用 norewrite提示。

 删除物化视图
SQL>drop materialized view emp_by_district;

原文地址:http://blog.csdn.net/lu_yongchao/article/details/4432710