`
longgangbai
  • 浏览: 7339774 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Oracle 性能调优学习笔记(十六)--- 使用物化视图

 
阅读更多

 


使用物化视图
       授权物化视图权限.
       grant create any masterialized view to scott;
       创建物化视图
       create materialized view mv
      as select * from scott.emp;
     
      物化视图的中的rowid和对应的表中的rowid不一致.
      视图中的rowid和对应表中的rowid一致.
     
     物化视图刷新类型:
       全部(C)
       exec dbms_mview.refresh('MV','C');
       增量(F)
          其实针对mv的信息至少一个update操作.
       强制(?)
       Never:
     
      
      
     物化视图更新模式
      手动
         dbms_mview.refresh('MV',parallelism=>10);
      多个
      dbms_mview.refresh('MV1,MV2',parallelism=>10);
      或者
      dbms_mview.refresh_dependent('EMP');
      备注:emp为mv的基表.
      刷新所有的视图:
       dbms_mview.refresh_all_mviews;
      
      自动(同步或者异步)
          通过oracle job实现自动刷新.
      物化视图
         在数据仓库系统中的使用.不同数据库中表的同步.
      高级数据复制中使用.
     查看PL中PL/SQL中package type和views;
     
    实例如下:
       使用实例证明实体化视图和视图的区别
     scott@TICKET> show user;
     USER 为 "SCOTT"
     scott@TICKET> create table t( key int primary key, val varchar(25));
     create table t( key int primary key, val varchar(25))
         *
     第 1 行出现错误:
     ORA-00955: 名称已由现有对象使用


     scott@TICKET> drop table t;

     表已删除。
     创建基础表
     scott@TICKET> create table t( key int primary key, val varchar(25));

     表已创建。
     插入基础数据
     scott@TICKET> insert into t  values(1,'a');

     已创建 1 行。

     scott@TICKET> insert into t  values(2,'b');

     已创建 1 行。

     scott@TICKET> insert into t  values(3,'c');

     已创建 1 行。

     scott@TICKET> commit;

     提交完成。

     scott@TICKET> select * from t;

         KEY VAL
     ---------- -------------------------
        1 a
        2 b
        3 c
     创建视图和物化视图
     scott@TICKET> create view v as select * from t;
     create view v as select * from t
        *
     第 1 行出现错误:
     ORA-01031: 权限不足


     scott@TICKET> conn / as sysdba
     已连接。

     GLOBAL_NAME
     --------------------------------------------------------------------------------
     sys@TICKET
     给scott创建视图和物化视图的授权
     sys@TICKET> grant create any view ,create any materialized view to scott;

     授权成功。

     sys@TICKET> conn scott/tiger
     已连接。

     GLOBAL_NAME
     --------------------------------------------------------------------------------
     scott@TICKET

     scott@TICKET> create view v as select * from t;

     视图已创建。

     scott@TICKET> select * from v;

         KEY VAL
     ---------- -------------------------
        1 a
        2 b
        3 c

     scott@TICKET> select rowid,a.* from t a;

     ROWID                     KEY VAL
     ------------------ ---------- -------------------------
     AAASzoAAEAAABHlAAA          1 a
     AAASzoAAEAAABHlAAB          2 b
     AAASzoAAEAAABHlAAC          3 c

     scott@TICKET> select rowid,a.* from v a;

     ROWID                     KEY VAL
     ------------------ ---------- -------------------------
     AAASzoAAEAAABHlAAA          1 a
     AAASzoAAEAAABHlAAB          2 b
     AAASzoAAEAAABHlAAC          3 c

     scott@TICKET> create materialized view mv  as
       2  select * from t;

     实体化视图已创建。

     scott@TICKET> select rowid,a.* from mv a;

     ROWID                     KEY VAL
     ------------------ ---------- -------------------------
     AAASzrAAEAAABH0AAA          1 a
     AAASzrAAEAAABH0AAB          2 b
     AAASzrAAEAAABH0AAC          3 c

     由上面:
      查询t,v,mv的信息可以看出mv的rowid和其他的不一样.
     
     scott@TICKET> update t set val='aa' where key=1;

     已更新 1 行。

     scott@TICKET> commit;

     提交完成。

     scott@TICKET> select * from t;

         KEY VAL
     ---------- -------------------------
        1 aa
        2 b
        3 c

     scott@TICKET> select * from v;

         KEY VAL
     ---------- -------------------------
        1 aa
        2 b
        3 c

     scott@TICKET> select * from mv;

         KEY VAL
     ---------- -------------------------
        1 a
        2 b
        3 c
     由上面可以查看当基表t变化,t和v的查询结果相应的发生变化.但是mv的数据不变化.

     scott@TICKET> host

     scott@TICKET> conn /as sysdba
     已连接。

     GLOBAL_NAME
     --------------------------------------------------------------------------------
     sys@TICKET

     sys@TICKET> conn scott/tiger
     已连接。

     GLOBAL_NAME
     --------------------------------------------------------------------------------
     scott@TICKET
     刷新物化视图的信息
     scott@TICKET> exec dbms_mview.refresh('MV');

     PL/SQL 过程已成功完成。

     scott@TICKET> select * from mv;

         KEY VAL
     ---------- -------------------------
        1 aa
        2 b
        3 c

     scott@TICKET> update t set val='aa' where key=2;

     已更新 1 行。

     scott@TICKET> select * from t;

         KEY VAL
     ---------- -------------------------
        1 aa
        2 aa
        3 c

     scott@TICKET> select * from v;

         KEY VAL
     ---------- -------------------------
        1 aa
        2 aa
        3 c
     由上面可以看出mv刷新之后,mv,t,v的数据一致.

     scott@TICKET> select * from mv;

         KEY VAL
     ---------- -------------------------
        1 aa
        2 b
        3 c


     在创建物化视图的时候指定为快速更新视图
     scott@TICKET> create materialized view mv_t refresh fast as select * from t;
     create materialized view mv_t refresh fast as select * from t
                    *
     第 1 行出现错误:
     ORA-23413: 表 "SCOTT"."T" 不带实体化视图日志


     scott@TICKET> create materialized view log on t;

     实体化视图日志已创建。

     scott@TICKET> create materialized view mv_t refresh fast as select * from t;

     实体化视图已创建。

     scott@TICKET> create materialized view mv_t2 refresh fast as select t.* from t;

     实体化视图已创建。

     由以上可以看出创建物化视图时候指定为快速更新视图必须先创建实体化视图日志,在创建实体化视图.


     scott@TICKET> update t set val='abc' where key=3;

     已更新 1 行。

     scott@TICKET> commit;

     提交完成。

     scott@TICKET> select * from t;

         KEY VAL
     ---------- -------------------------
        1 aa
        2 aa
        3 abc

     scott@TICKET> select * from v;

         KEY VAL
     ---------- -------------------------
        1 aa
        2 aa
        3 abc

     scott@TICKET> select * from mv;

         KEY VAL
     ---------- -------------------------
        1 aa
        2 b
        3 c

     scott@TICKET> select * from mv_t;

         KEY VAL
     ---------- -------------------------
        1 aa
        2 aa
        3 c

     scott@TICKET> select * from mv_t2;

         KEY VAL
     ---------- -------------------------
        1 aa
        2 aa
        3 c

     执行实体物化视图全部刷新
     scott@TICKET> exec dbms_mview.refresh('MV','C');
     PL/SQL 过程已成功完成。

     执行实体物化视图快速刷新
     scott@TICKET> exec dbms_mview.refresh('MV','F');
     PL/SQL 过程已成功完成。


     执行实体物化视图强制刷新
     scott@TICKET> exec dbms_mview.refresh('MV','?');

     PL/SQL 过程已成功完成。


     查看物化视图的表信息
     scott@TICKET> desc user_objects;
      名称                                      是否为空? 类型
      ----------------------------------------- -------- ----------------------------
      OBJECT_NAME                                        VARCHAR2(128)
      SUBOBJECT_NAME                                     VARCHAR2(30)
      OBJECT_ID                                          NUMBER
      DATA_OBJECT_ID                                     NUMBER
      OBJECT_TYPE                                        VARCHAR2(19)
      CREATED                                            DATE
      LAST_DDL_TIME                                      DATE
      TIMESTAMP                                          VARCHAR2(19)
      STATUS                                             VARCHAR2(7)
      TEMPORARY                                          VARCHAR2(1)
      GENERATED                                          VARCHAR2(1)
      SECONDARY                                          VARCHAR2(1)
      NAMESPACE                                          NUMBER
      EDITION_NAME                                       VARCHAR2(30)

     scott@TICKET> col object_name for a30;
     scott@TICKET> col object_type for a20;
     scott@TICKET> select object_name,object_type from user_objects;

     OBJECT_NAME                    OBJECT_TYPE
     ------------------------------ --------------------
     BONUS                          TABLE
     SALGRADE                       TABLE
     EMP_ENAME_IDX                  INDEX
     EMP_JOB_IDX                    INDEX
     SUPPLIER                       TABLE
     EMP_TEMP                       TABLE
     MLOG$_EMP                      TABLE
     RUPD$_EMP                      TABLE
     TEST                           TABLE
     SALES_DELTA                    TABLE
     DEPT                           TABLE
     EMP                            TABLE
     PK_EMP                         INDEX
     PK_DEPT                        INDEX
     TBS                            TABLE
     SYS_C0015204                   INDEX
     T                              TABLE
     V                              VIEW
     MV                             TABLE
     SYS_C0015205                   INDEX
     MV                             MATERIALIZED VIEW
     MLOG$_T                        TABLE
     RUPD$_T                        TABLE
     MV_T                           TABLE
     SYS_C0015206                   INDEX
     MV_T                           MATERIALIZED VIEW
     MV_T2                          TABLE
     SYS_C0015207                   INDEX
     MV_T2                          MATERIALIZED VIEW

     已选择29行。
     由以上信息可以看出
        1.在对象信息(MV_T,MV_T2,MV)可以看出物化视图均对应一个同名称的表.
     由此可以解释为当t表更新时候,mv不更新的原因,mv实际是把基表对应的查询结果放在一个表中,查询mv
     查询结果集的信息.每
        2.每一个实体化视图日志对应的对应的表如t创建实体化视图日志,对应的表为mlog$_t.
       命名规则为:mlog$_<TBS_NAME>

     scott@TICKET> desc mlog$_t;
      名称                                      是否为空? 类型
      ----------------------------------------- -------- ----------------------------
      KEY                                                NUMBER(38)
      SNAPTIME$$                                         DATE
      DMLTYPE$$                                          VARCHAR2(1)
      OLD_NEW$$                                          VARCHAR2(1)
      CHANGE_VECTOR$$                                    RAW(255)

     scott@TICKET> update t set val='aaab'  where key=1;

     已更新 1 行。

     scott@TICKET> select count(1) from mlog$_t;

       COUNT(1)
     ----------
        2

     scott@TICKET> commit;

     提交完成。

     scott@TICKET> select count(1) from mlog$_t;

       COUNT(1)
     ----------
        2

     scott@TICKET> select rowid,a.* from mv a;

     ROWID                     KEY VAL
     ------------------ ---------- -------------------------
     AAASzrAAEAAABH0AAA          1 aa
     AAASzrAAEAAABH0AAB          2 aa
     AAASzrAAEAAABH0AAC          3 abc

     scott@TICKET> spool off;


     参考官方网站:http://download.oracle.com/docs/cd/B10501_01/server.920/a96568/rarmviea.htm

 

 

分享到:
评论

相关推荐

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

    在本篇循序渐进的学习笔记中,我们将深入探讨物化视图的概念、用途、刷新机制及其相关问题。 首先,我们需要了解几个关键术语。基表是创建物化视图时引用的原始数据表或视图,而物化视图(MView)则是基于这些基表...

    ORACLE性能调优

    Oracle性能调优是数据库管理员和开发人员在处理Oracle数据库系统时必须掌握的关键技能。这个主题涵盖了广泛的知识点,包括查询优化、内存管理、磁盘I/O优化、并发控制以及资源调度等多个方面。以下是对这些核心概念...

    《Pro Oracle SQL》 读书笔记--Chapter 6--6.2 Execution Plans--之四

    - **物化视图与重写**:物化视图可以预先计算并存储结果,重写机制能自动用物化视图替换部分查询。 6. **实际运行结果分析**:`6-5例子在10g_express版本运行的实际结果.txt`可能包含了一个具体的查询案例,展示了...

    ORACLE学习笔记(一)---体系结构

    这篇"ORACLE学习笔记(一)---体系结构"将带你深入理解Oracle数据库的基础架构,这对于任何想要掌握Oracle数据库操作和管理的人来说都是至关重要的。 首先,我们要了解Oracle数据库的三大核心组件:数据存储、进程...

    我的Oracle 11g OCP学习笔记

    5. **性能调优**:理解Oracle的执行计划,学习如何使用SQL优化工具进行性能问题排查。 6. **故障诊断与恢复**:学习如何处理数据库故障,使用RMAN进行备份和恢复,以及使用闪回技术。 7. **高级特性**:如RAC、ASM...

    成功之路Oracle11g学习笔记

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

    玩转oracle学习笔记(二)-Oracle表的管理

    "玩转Oracle学习笔记(二)-Oracle表的管理"这一主题深入探讨了如何有效地创建、维护和管理Oracle数据库中的表。Oracle提供了丰富的语法和功能来满足不同业务场景的需求。 首先,创建表是数据库设计的基础步骤。在...

    oracle入门心得----帮你学习oracle

    了解这些基础知识后,可以逐步深入学习SQL、PL/SQL编程,数据库性能调优,备份与恢复策略,以及Oracle的高级特性如物化视图、分区表、索引等。通过不断实践和学习,逐步构建起对Oracle全面的认知,为成为专业人士...

    Oracle 超强学习笔记

    使用 Explain Plan分析SQL执行计划,通过索引优化、表分区、物化视图和SQL调优来提升数据库性能。还有性能监控工具如AWR和ASH,帮助识别和解决问题。 9. **数据库设计** 正确的数据建模和规范化理论是设计高效...

    ORACLE-----ORACLE笔记

    12. 性能优化:通过SQL调优、索引优化、物化视图、分区、内存管理等手段,可以优化数据库性能。Oracle的Explain Plan和Automatic Workload Repository (AWR)报告是常用的性能分析工具。 13. 安全性:Oracle提供用户...

    oracle学习笔记整理

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

    Oracle学习资料doc

    - SQL优化:理解执行计划,如何使用EXPLAIN PLAN分析SQL性能,并使用索引、物化视图等优化手段。 - 分区技术:学习Oracle分区表和索引的原理和应用场景,以及如何通过分区来提升查询速度和管理效率。 - 会话管理...

    涂抹Oracle--三思笔记

    《涂抹Oracle--三思笔记》是一份专注于Oracle数据库技术的学习资料,主要涵盖了Oracle数据库系统的基础知识、高级特性和常见问题的解决策略。这份文档可能是由一位经验丰富的IT专家撰写,旨在帮助读者深入理解和掌握...

    MSDN oracle学习笔记

    在“MSDN Oracle学习笔记”中,我们可以期待找到关于Oracle数据库的详细讲解和实践指导。 首先,Oracle数据库的基础知识是必不可少的。这通常涵盖数据库系统的基本概念,如SQL(结构化查询语言)的使用,数据类型,...

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

    在本实验笔记中,主要探讨了物化视图(Materialized Views)这一重要的数据库特性,它是数据仓库和OLAP(在线分析处理)系统中的关键组件,用于提高查询性能和数据一致性。 物化视图是一种预先计算并存储的查询结果...

    oracle数据库学习笔记

    本学习笔记旨在提供全面、深入的Oracle知识体系,帮助读者从基础到高级掌握Oracle数据库的使用。 首先,Oracle数据库的核心概念包括数据模型、数据库架构和SQL语言。数据模型是数据库设计的基础,主要包括实体、...

    oracle学习笔记,介绍详细

    这份“Oracle学习笔记”无疑是你深入理解和掌握Oracle技术的重要资源。笔记涵盖了Oracle的语法基础、核心概念以及各种实用功能,旨在帮助初学者快速上手,同时也能为有一定经验的DBA提供参考。 首先,Oracle数据库...

    Oracle经典学习笔记

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

    oracle 学习笔记资料

    Oracle是世界上最广泛使用的数据库管理系统之一...以上就是根据给定文件名推测的Oracle学习笔记资料可能涵盖的主要知识点。通过深入学习和实践,可以掌握Oracle数据库的使用和管理,从而在IT领域中提升自己的专业能力。

    Oracle-ERP开发笔记

    - 物化视图是一种预先计算好的视图,可以提高查询性能。 **23. 通过游标更新数据** - 游标提供了迭代处理数据集的能力,适用于复杂的更新操作。 **24. 游标变量** - 游标变量可以用来存储游标的引用,方便后续的...

Global site tag (gtag.js) - Google Analytics