`

oracle物化视图学习笔记

阅读更多
最近学习了一下物化视图,正好经理不在,把学习结果贴出来供大家一起研究一下吧。
先看一下物化视图的大概含义吧,感觉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()命令对时间取整到天数,然后加上时间。
分享到:
评论

相关推荐

    oracle物化视图_循序渐进学习笔记

    Oracle物化视图是一种在数据库中预先计算并存储视图查询结果的数据对象,它与普通的视图不同,普通视图在查询时动态地基于基表数据生成结果,而物化视图则拥有自己的物理存储,提供了对数据的快速访问。在本篇循序渐...

    成功之路Oracle11g学习笔记

    高级特性如实时应用集群(RAC)、数据分区、物质化视图、物化查询表等也是Oracle11g的重要组成部分,它们在大型企业级应用中发挥着重要作用,能够提高系统的可用性和性能。 总之,《成功之路Oracle11g学习笔记》是...

    OCM考试实验笔记之一_物化视图.pdf

    7. ITPUX技术网提供了更多关于Oracle OCM考试和物化视图的文档资源,以及相关的技术交流群,供学习者进行深入讨论和交流。 总之,物化视图在优化复杂查询和提高数据仓库性能方面扮演着重要角色。理解其创建、刷新...

    我的Oracle 11g OCP学习笔记

    本学习笔记详细记录了作者在准备Oracle 11g OCP认证过程中的学习心得和实践经验,对于希望深入理解Oracle数据库管理和优化的读者来说,是一份宝贵的资料。 Oracle 11g包含了许多重要的特性和改进,例如: 1. **...

    Oracle 超强学习笔记

    本"Oracle超强学习笔记"将带你深入探索Oracle的世界,掌握从基础到高级的各种技术,助你在数据库管理领域提升专业技能。 1. **Oracle简介** Oracle数据库是由美国甲骨文公司开发的关系数据库系统,其核心组件包括...

    oracle学习笔记整理

    以下是对Oracle学习笔记整理的主要知识点的详细说明: 1. **数据库选择**: 在决定使用哪种数据库时,通常需要考虑项目的规模、性能需求、安全性要求以及可用资源。Oracle数据库因其稳定性、可扩展性和高性能而被...

    MSDN oracle学习笔记

    还有可能讨论到表分区、物化视图、数据库缓存(如SGA和PGA)的管理和调整。 Oracle的并发控制,如行级锁定和多版本并发控制(MVCC),是确保数据一致性的关键机制。笔记会详细解释这些机制以及在并发环境下可能出现...

    oracle数据库学习笔记

    最后,Oracle数据库还支持高级特性,如分区、物化视图、数据仓库和实时应用集群(RAC)。学习这些特性有助于构建高可用性和高性能的数据库解决方案。 总的来说,"Oracle数据库学习笔记"涵盖了Oracle数据库的基础...

    Oracle经典学习笔记

    这些只是Oracle SQL学习的基础部分,随着深入,还会涉及到更高级的主题,如分区表、物化视图、物化查询表、递归查询、并行查询、性能优化等。对于想要在Oracle数据库领域提升技能的初学者来说,这份“Oracle经典学习...

    oracle学习笔记,介绍详细

    最后,笔记可能还会提及Oracle的一些高级特性,如分区表、物化视图、Materialized View Logs、RAC(Real Application Clusters)集群技术,以及Oracle的云服务等,这些都是Oracle在企业级应用中独特的优势。...

    MLDN_Oracle学习笔记+源码 李兴华讲解

    《MLDN_Oracle学习笔记+源码 李兴华讲解》是针对Oracle数据库系统的一份详尽学习资源,由知名讲师李兴华精心编撰。这份资料不仅包含了丰富的理论知识,还提供了源代码实例,旨在帮助学习者深入理解和掌握Oracle...

    学习oracle的TXT格式笔记

    "oracle马士兵上课笔记.txt"可能来源于知名讲师马士兵的Oracle课程,可能涵盖高级特性如数据库分区、物化视图、数据库链接、并发控制等。这些内容对于提升数据库管理技能和解决复杂问题非常有帮助。 "第一天ORACLE...

    oracle 学习笔记资料

    6. **性能优化**:Oracle提供了一系列工具和技术用于提升数据库性能,如SQL优化器、索引策略、分区、物化视图等。这些内容可能在各个文档中都有所提及,特别是"ORACLE-课后自学内容.doc"和"Oracle-day04.pdf"。 7. ...

    oracle学习笔记

    Oracle学习笔记概述 Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,由Oracle公司开发,以其高度可扩展性、安全性和稳定性而闻名。本学习笔记旨在为初学者提供全面的Oracle知识体系,帮助读者快速掌握...

    oracle学习笔记.docx

    这篇学习笔记将探讨Oracle的一些核心概念和关键特性,帮助你更好地理解和掌握这个强大的数据库系统。 一、Oracle数据库概述 Oracle数据库是一种多用户、支持SQL的、支持网络环境的数据库管理系统。它由Oracle公司...

    Oracle学习笔记

    进一步探讨Oracle的高级特性,如物化视图、物质化连接、数据库链接、闪回技术等。 通过阅读和实践这个Oracle学习笔记,无论你是数据库新手还是有经验的专业人士,都能深化对Oracle的理解,提升数据库管理技能。...

    Oracle培训教程及笔记

    Oracle的性能优化是高级话题,涉及到索引策略、SQL调优、表分区、物化视图和存储过程的使用。通过监控数据库性能,使用工具如AWR(自动工作负载 repository)和ASH(活跃会话历史)报告,可以识别并解决问题,提高...

    涂抹Oracle--三思笔记

    7. **高级特性**:可能涵盖物化视图、分区表、 flashback技术、物质化子查询、数据库链接以及数据仓库和OLAP(在线分析处理)的相关内容。 8. **Oracle 12c及更高版本的新特性**:如果笔记更新至较新版本,可能会...

    oracle_sql笔记

    Oracle提供了多种性能优化手段,如索引优化、查询优化、分区技术、物化视图、绑定变量等。理解并运用这些方法能显著提升查询效率。 通过深入学习和实践这些Oracle SQL知识点,你将能够高效地管理和操作Oracle数据库...

Global site tag (gtag.js) - Google Analytics