先看一下物化视图的大概含义吧,感觉baidu的定义还不错
- 物化视图,它是用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,从而快速的得到结果。物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL 语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。 其中物化视图有三种:聚集物化视图、包含连接物化视图、嵌套物化视图。但三种物化视图的快速刷新的限制条件有很大区别,而其他方面则区别不大。
- http://baike.baidu.com/view/3208435.htm
我的理解就是把表中的数据存起来的一种视图,他只是名义上叫做视图,实际上和普通表的效果差不多,主要是供查询使用的。目前本人理解应该不可以插入、删除数据。物化视图数据可以更新,下面会说到。普通视图记录了查询SQL语句,实际使用时还是从实体表中查询获得数据,而物化视图有自己的存储空间,减少了对实体表的访问。
1.如何建立一个物化视图
- --创建
- CREATE MATERIALIZED VIEW MV_VIEW AS {SELECT * FROM}
- --删除
- DROP MATERIALIZED VIEW MV_VIEW AS {SELECT * FROM}
- --例如
- create materialized view MV_SM_USERINFO
- refresh force on demand
- start with to_date('19-01-2012 11:00:00', 'dd-mm-yyyy hh24:mi:ss') next to_date(concat(to_char(SYSDATE+1,'dd-mm-yyyy'),'11:00:00'),'dd-mm-yyyy hh24:mi:ss')
- as
- select sm_user.pk_user,sm_user.user_name,sm_user.user_code,sm_user.password,sm_user.identity_no,sm_user.memo,
- sm_org.pk_org,sm_org.org_code,sm_org.org_name
- from sm_user,sm_org where sm_user.pk_org = sm_org.pk_org
- --这个物化视图使用了定时更新功能
2.如何让一个物化视图定时更新
ON DEMAND 手工刷新,自动刷新
ON COMMIT 基表发生了commit 就会自动更新
定时更新
- --指定物化视图每天刷新一次
- CREATE MATERIALIZED VIEW MV_VIEW REFRESH FORCE ON DEMAND
- START WITH SYSDATE
- NEXT SYSDATE+1
- AS
- ……
- --指定物化视图每天晚上10:00点刷新一次
- CREATE MATERIALIZED VIEW MV_VIEW REFRESH FORCE ON DEMAND
- START WITH SYSDATE
- NEXT TO_DATE(CONCAT(TO_CHAR(SYSDATE+1,'DD-MM-YYYY'),'22:00:00'),'DD-MM-YYYY HH24:MI:SS')
- AS
3.如何给物化视图设置日志
- --语法
- CREATE MATERIALIZED VIEW LOG ON TABLE_NAME
- WITH SEQUENCE,ROWID
- (NUM1,NUM2,NUM3,NUM4,NUM5,NUM6,NUM7
- )INCLUDING NEW VALUES;
- --sm_user 建立日志
- create materialized view log on sm_user with SEQUENCE,ROWID(pk_user,user_name,user_code,password,identity_no);
- --sm_org 建立日志
- create materialized view log on sm_org with SEQUENCE,ROWID(pk_org,org_code,org_name);
- 查看日志
- select * from mlog$_sm_org
- select * from mlog$_sm_user
- --查询日志
- select * from dba_snapshot_logs
- --查询物化视图
- select * from dba_snapshot_logs
- --查询oracle版本信息
- select * from gv$version;
4.如何使用JAVA线程定时更新物化视图
需要先建立储存过程更新物化视图,然后使用java线程调用储存过程。(目前我的理解)
- --存储过程
- create or replace procedure MV_REFRESH_USERINFO is
- begin
- dbms_mview.refresh('MV_SM_USERINFO');
- end MV_REFRESH_USERINFO;
- --线程调用从存储过程
- private int count = 0;
- Connection orclcon;
- public void run(){
- if(orclcon==null){
- JDBCDao jdbc = new JDBCDao();
- orclcon = jdbc.getMATERVIEWConnection();
- }
- try {
- CallableStatement proc = orclcon.prepareCall("{call MV_REFRESH_USERINFO()}");
- boolean result = proc.execute();
- count++;
- System.out.println("call MV_REFRESH_USERINFO() " + result + ";已经运行: " + count);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
5.其他资料
物化视图创建参数
(1)BUILD
BUILD IMMEDIATE 是在创建物化视图的时候就生成数据
BUILD DEFERRED 则在创建时不生成数据,以后根据需要再生成数据。
默认为BUILD IMMEDIATE。
(2)REFRESH
FAST 增量刷新用物化视图日志,来发送主表已经修改的数据行到物化视图中。
COMPLETE 完全刷新重新生成整个视图,如果请求完全刷新,oracle会完成完全刷新即使增量刷新可用。
FORCE 如果增量刷新可用Oracle将完成增量刷新,否则将完成完全刷新,如果不指定刷新方法(FAST, COMPLETE, or FORCE)。
默认选项是Force。
(3)ON
ON DEMAND 指物化视图在用户需要的时候进行刷新。
ON COMMIT 指出物化视图在对基表的DML操作提交的同时进行刷新。
默认是ON DEMAND.
(4)START WITH
通知数据库完成从主表到本地表第一次复制的时间。
(5)NEXT
说明了刷新的时间间隔
根据下一次刷新的时间=上一次执行完成的时间+时间间隔。
为了保证在用户需要的时间点刷新,一般使用TRUNC()命令对时间取整到天数,然后加上时间。 物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。
物化视图可以查询表,视图和其它的物化视图。主要用在数据仓库和决策支持系统。
通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。
对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。
对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。
物化视图把他的物理结构存储在自己的段中,该段可以被索引和分区。
查询不必完全匹配用来创建物化视图的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;
相关推荐
Oracle 物化视图创建和使用 Oracle 物化视图是一种预先计算并保存表连接或聚集等耗时较多的操作的结果,以提高查询性能。物化视图对应用程序透明,不会影响应用程序的正确性和有效性,但需要占用存储空间。基表发生...
Oracle物化视图是一种数据库对象,它存储了查询结果,以提供快速的数据访问,特别适合于需要频繁查询但计算过程复杂或涉及大量数据连接的场景。物化视图的使用可以显著提高查询性能,因为它避免了每次查询时的计算...
"Oracle 物化视图增量刷新的应用研究" Oracle 物化视图是 Oracle 公司提供的一种新技术,可以解决很多普通逻辑视图无法完成的功能。物化视图操作简单,支持增量刷新及全量刷新,可以支持复杂的表连接、聚合函数等...
Oracle物化视图是一种在数据库中预先计算并存储视图查询结果的数据对象,它与普通的视图不同,普通视图在查询时动态地基于基表数据生成结果,而物化视图则拥有自己的物理存储,提供了对数据的快速访问。在本篇循序渐...
"利用ORACLE物化视图建立报表数据库.pdf" 本文主要介绍了利用ORACLE物化视图建立报表数据库的方法和原理。报表数据库是指独立于生产数据库的数据库,用于存储和管理报表数据。通过建立报表数据库,可以实现工作负荷...
### Oracle 物化视图详解 #### 一、物化视图的概念与作用 物化视图是Oracle数据库中一种特殊的数据对象,它保存的是基于一个或多个表(称为基表)的查询结果集,并且这些结果集是物理上存在的。与普通的视图不同,...
Oracle 物化视图 Oracle 物化视图是数据库对象,存储远程表的数据副本,也可以称为快照。物化视图可以查询表、视图和其他物化视图。通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。 创建...
Oracle数据库中的物化视图(Materialized View,简称MV)是一种强大的优化工具,它通过预先计算并存储查询结果,提供了一种快速访问复杂查询数据的方式。这种技术在数据仓库环境中尤其有用,因为数据仓库通常涉及...
Oracle物化视图是数据库管理系统中的一个重要特性,尤其在处理大量数据和复杂查询的场景下,它可以极大地提升查询性能和数据一致性。物化视图与普通的视图不同,后者是逻辑上的虚表,其内容在查询时动态计算,而物化...
### ORACLE9I 物化视图 #### 执行概览 随着数据库技术的发展,无论是数据仓库、数据集市还是在线事务处理(OLTP)系统,都承载着大量的等待被发现和理解的信息。然而,在海量数据中及时准确地查找并呈现这些信息...
### Oracle物化视图详解 #### 一、物化视图概述 Oracle物化视图是一种特殊类型的数据库对象,其核心功能在于预先计算并存储基于一个或多个表的查询结果,以此来加速后续的查询操作。与普通视图不同,普通视图在...
Oracle物化视图日志是一种强大的数据同步技术,尤其适用于分布式数据库和分布式应用系统之间的数据一致性维护。在当今信息化系统中,随着技术的快速发展,数据的分布性和实时性需求日益增强,数据同步成为了一个关键...
### ORACLE 物化视图详解 #### 一、物化视图概述 在Oracle数据库中,物化视图(Materialized View)是一种特殊的数据库对象,它存储的是一个查询的结果集,可以理解为一个预计算的快照。物化视图主要用于提高报表...
### ORACLE使用物化视图和查询重写功能 #### 一、概述 在Oracle数据库中,物化视图和查询重写功能是提高查询效率和简化数据仓库管理的重要工具。物化视图是一种预计算的数据集合,它可以存储查询的结果集,而查询...
Oracle物化视图是Oracle数据库中一种非常重要的特性,它提供了数据的一致性视图,通常用于实现数据的异步复制。本配置指导书主要针对Oracle高级复制中的物化视图,旨在帮助用户理解并成功配置物化视图,以满足在实际...
物化视图是 Oracle 中的一种性能优化技术,它可以将复杂的查询结果存储在一个物化视图中,以便快速地检索数据。物化视图有三种刷新方式:COMPLETE、FAST 和 FORCE。 COMPLETE 刷新方式会删除表中所有的记录,然后...
总结来说,Oracle物化视图是一种强大的性能优化工具,通过预先计算和存储查询结果,提高查询效率,减轻网络压力,支持大规模部署,并能在离线环境下提供服务。正确使用物化视图可以有效地提升数据库系统的整体性能,...
### Oracle如何根据物化视图日志快速刷新物化视图 #### 一、物化视图及其日志介绍 在Oracle数据库中,物化视图(Materialized View)是一种特殊的对象,它存储了预计算查询的结果,从而可以提高查询性能。物化视图...