转:oracle物化视图学习笔记

最近学习了一下物化视图,正好经理不在,把学习结果贴出来供大家一起研究一下吧。 
先看一下物化视图的大概含义吧,感觉baidu的定义还不错

Baidu代码  

  1. 物化视图,它是用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,从而快速的得到结果。物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL 语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。   其中物化视图有三种:聚集物化视图、包含连接物化视图、嵌套物化视图。但三种物化视图的快速刷新的限制条件有很大区别,而其他方面则区别不大。
  2. http://baike.baidu.com/view/3208435.htm

我的理解就是把表中的数据存起来的一种视图,他只是名义上叫做视图,实际上和普通表的效果差不多,主要是供查询使用的。目前本人理解应该不可以插入、删除数据。物化视图数据可以更新,下面会说到。普通视图记录了查询SQL语句,实际使用时还是从实体表中查询获得数据,而物化视图有自己的存储空间,减少了对实体表的访问。

1.如何建立一个物化视图

Sql代码  

  1. --创建
  2. CREATE MATERIALIZED VIEW MV_VIEW AS {SELECT * FROM}
  3. --删除
  4. DROP MATERIALIZED VIEW MV_VIEW AS {SELECT * FROM}
  5. --例如
  6. create materialized view MV_SM_USERINFO
  7. refresh force on demand
  8. 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‘)
  9. as
  10. select sm_user.pk_user,sm_user.user_name,sm_user.user_code,sm_user.password,sm_user.identity_no,sm_user.memo,
  11. sm_org.pk_org,sm_org.org_code,sm_org.org_name
  12. from sm_user,sm_org where sm_user.pk_org = sm_org.pk_org
  13. --这个物化视图使用了定时更新功能

2.如何让一个物化视图定时更新 
ON DEMAND 手工刷新,自动刷新 
ON COMMIT 基表发生了commit 就会自动更新 
定时更新

Sql代码  

  1. --指定物化视图每天刷新一次
  2. CREATE MATERIALIZED VIEW MV_VIEW REFRESH FORCE ON DEMAND
  3. START WITH SYSDATE
  4. NEXT SYSDATE+1
  5. AS
  6. ……
  7. --指定物化视图每天晚上10:00点刷新一次
  8. CREATE MATERIALIZED VIEW MV_VIEW REFRESH FORCE ON DEMAND
  9. START WITH SYSDATE
  10. NEXT TO_DATE(CONCAT(TO_CHAR(SYSDATE+1,‘DD-MM-YYYY‘),‘22:00:00‘),‘DD-MM-YYYY HH24:MI:SS‘)
  11. AS

3.如何给物化视图设置日志

Sql代码  

  1. --语法
  2. CREATE MATERIALIZED VIEW LOG ON TABLE_NAME
  3. WITH SEQUENCE,ROWID
  4. (NUM1,NUM2,NUM3,NUM4,NUM5,NUM6,NUM7
  5. )INCLUDING NEW VALUES;
  6. --sm_user 建立日志
  7. create materialized view log on sm_user with SEQUENCE,ROWID(pk_user,user_name,user_code,password,identity_no);
  8. --sm_org 建立日志
  9. create materialized view log on sm_org with SEQUENCE,ROWID(pk_org,org_code,org_name);
  10. 查看日志
  11. select * from mlog$_sm_org
  12. select * from mlog$_sm_user
  13. --查询日志
  14. select * from dba_snapshot_logs
  15. --查询物化视图
  16. select * from dba_snapshot_logs
  17. --查询oracle版本信息
  18. select * from gv$version;

4.如何使用JAVA线程定时更新物化视图 
需要先建立储存过程更新物化视图,然后使用java线程调用储存过程。(目前我的理解)

Sql代码  

  1. --存储过程
  2. create or replace procedure MV_REFRESH_USERINFO is
  3. begin
  4. dbms_mview.refresh(‘MV_SM_USERINFO‘);
  5. end MV_REFRESH_USERINFO;
  6. --线程调用从存储过程
  7. private int count = 0;
  8. Connection orclcon;
  9. public void run(){
  10. if(orclcon==null){
  11. JDBCDao jdbc = new JDBCDao();
  12. orclcon = jdbc.getMATERVIEWConnection();
  13. }
  14. try {
  15. CallableStatement proc = orclcon.prepareCall("{call MV_REFRESH_USERINFO()}");
  16. boolean result = proc.execute();
  17. count++;
  18. System.out.println("call MV_REFRESH_USERINFO() " + result + ";已经运行: " + count);
  19. } catch (SQLException e) {
  20. e.printStackTrace();
  21. }
  22. }

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()命令对时间取整到天数,然后加上时间。

http://highill.iteye.com/blog/1357896

时间: 2024-11-08 19:24:54

转:oracle物化视图学习笔记的相关文章

oracle物化视图

原文URL: oracle 10g物化视图简介 2012-05-09 17:33:55|  分类: ORACLE性能 |  标签:oracle  物化视图  |举报|字号 订阅 下载LOFTER我的照片书  | 环境oracle 10g 10.2.0.4  linux 64 要大而专业的看oracle自己的文档-sql参考. 说实话,oracle需要学习的内容太多,每个都看过去,实在太费事. 所以如果能够对物化视图有个概览,那最方便不过. 主要涉及内容 物化视图日志,用于快速刷新所必须的 物化视

oracle 物化视图

我们如果遇到需要从其它系统的数据库中取数据进行统计分析的问题,可疑选择使用ORACLE的ODI工具进行抽数,但是对方提供的数据库用户下没有任何对象,只是有查询所有表的权限,因此无法做数据反向. 于是决定使用物化视图,把对方数据库中的数据拿过来,虽然数据量比较大,但是每月只拿一次,而且如果设置成增量更新,也不会太慢.现在记录下物化视图的创建过程(以一张表为例). 一.准备条件以及备注 假设双方数据库都是ORACLE10g,需要同步过来的表名叫:GG_ZLX_ZHU,对方数据库用户名:usernam

ORACLE物化视图详解

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

Oracle 物化视图 说明

一.    物化视图概述 Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表.物化视图存储基于远程表的数据,也可以称为快照. 物化视图可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果.物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能:物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性:物化视图需要占用存储

[O]ORACLE物化视图的使用

用于数据复制的物化视图 物化视图的一个主要功能就是用于数据的复制,Oracle推出的高级复制功能分为两个部分,多主复制和物化视图复制.而物化视图复制就是利用了物化视图的功能. 物化视图复制包含只读物化视图复制.可更新物化视图复制和可写物化视图复制. 1.只读物化视图复制建立的是源数据库的只读环境. 2.可更新物化视图复制建立基于物化视图双向复制环境. 3.可写物化视图复制在物化视图建立的时候使用了FOR UPDATE,但是没有像可更新物化视图那样添加到物化视图组中,因此本地物化视图可以修改,但是

解决oracle 物化视图刷新失败

oracle 物化视图刷新失败可能原因: 1.视图未建立物化视图日志 2.基表为授权给用户 1.物化视图语法 create materialized view [view_name] refresh [fast|complete|force] [ on [commit|demand] | start with (start_time) next (next_time) ] as {创建物化视图用的查询语句} 以上是Oracle创建物化视图(Materialized View,以下简称MV)时的常

oracle物化视图创建

我们如果遇到需要从其它系统的数据库中取数据进行统计分析的问题,可疑选择使用ORACLE的ODI工具进行抽数,但是对方提供的数据库用户下没有任何对象,只是有查询所有表的权限,因此无法做数据反向. 于是决定使用物化视图,把对方数据库中的数据拿过来,虽然数据量比较大,但是每月只拿一次,而且如果设置成增量更新,也不会太慢.现在记录下物化视图的创建过程(以一张表为例). 一.准备条件以及备注 假设双方数据库都是ORACLE10g,需要同步过来的表名叫:GG_ZLX_ZHU,对方数据库用户名:usernam

[转载]oracle物化视图

原文URL:http://lzfhope.blog.163.com/blog/static/636399220124942523943/?suggestedreading&wumii 环境oracle 10g 10.2.0.4  linux 64 要大而专业的看oracle自己的文档-sql参考. 说实话,oracle需要学习的内容太多,每个都看过去,实在太费事. 所以如果能够对物化视图有个概览,那最方便不过. 主要涉及内容 物化视图日志,用于快速刷新所必须的 物化视图 权限,通常不是个难题,因

oracle物化视图快速更新

建立测试表 create table T_table nologging as select * from dba_objects; create table t_table_1 nologging as select * from dba_tables; --建立日志记录 create materialized view log on T_table with rowid ,sequence(object_name,object_type,owner) including new values