首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

ORACLE物化视图 - 稳中有进MView(一) 什么是MView

2012-07-30 
ORACLE物化视图 - 循序渐进MView(一) 什么是MView?http://www.dbabeta.com/2009/mview_step_by_step_01.ht

ORACLE物化视图 - 循序渐进MView(一) 什么是MView

?

http://www.dbabeta.com/2009/mview_step_by_step_01.html

?

前言几个术语的对应什么是MViewMView的基本概念一个简单的例子MView的作用MView的刷新MView刷新的分类指定刷新方式什么时候刷新MView的基本构成


前言MView的两大应用方向
    一是用于数据库的复制,这个在Oracle文档《Advanced Replication》中有详细的描述。另一个是用于数据仓库,同样Oracle文档《Oracle Database Data Warehousing Guide》中也有详细的描述。

    本系列文章以实例的方式一步步的说是什么是MView、MView的结构、MView的基本工作过程,以及MView的管理方法。


    几个术语的对应基表指的是英文里面的Master Table和Master Materialized View,并不只是只一个表,而是创建MView的时候所需要用到的n个表或者是相关的上一级的MView。MView就是Materialized View了,物化视图。源数据库端Master Site和Master Materialized View Site,指的是基表所在的数据库MView端Materialized View Site,MView所在的数据库

    ?


    什么是MView


    MView的基本概念

    MView中文名称为物化视图(Materialized View),相对于不同的视图来说,MView的不同之处在于MView的结果会保存在一个普通的数据表中,在对MView进行查询的时候不再会对创建MView的基表进行查询,而是直接查询MView对应的结果表,然后通过定期的刷新机制来更新MView表中的数据。


    一个简单的例子
    MView架构图(来自Oracle Advance Replication)

    现在我们只对一些当前接触到的相关的对象进行说明,其他的部分将在后面的文章中陆续说明:

    必要组成部分
      基表(MASTER TABLE):这里说的基表不一定只有一个表,也有可能是一个复杂的查询,涉及很多的表,也可能是一个MView。隐藏的MView对象:对象类型为Materialized View的一个对象,用来维护MView的创建信息。MView表:MView所对应的数据表,这个表也就是一个普通的表,不同的就是这个表是和一个MView相关联的表。基表的INDEXMView的INDEX:对以用PK建立的MView将会有一个与基表结果一样名字类似的索引,对以使用ROWID建立的MView将有一个以I_SNAP$_materialized_view_name格式命名的建立在ROWID列上的INDEX。当然你也可以根据需要自己再创建一些INDEX。对于需要快速刷新的物化视图
        MView LOG:要使MView能够被快速刷新的话必须在基表上面创建MView Log,创建MView Log的语法为CREATE MATERIALIZED VIEW LOG ON master_name,MView Log表为Oracle默认以MLOG$_master_name的命名格式建立。维护MLOG$_的内部触发器:在基表上面的所有DML操作都有一个在基表上的内部触发器记录到MLOG$_master_name中,这个触发器在USER_TRIGGERS是看不到的,不过能够用USER_INTERNAL_TRIGGERS看到。

        下面用一个例子来看一下这些个对象

        -- 创建一个基表
        SQL>?CREATE?TABLE?TTT1(A?INT?PRIMARY?KEY,?B?INT);
        Table?created.
        ?
        -- 以TTT1为基表创建一个可更新的MView
        SQL>?CREATE?SNAPSHOT?MV_TTT1?FOR?UPDATE?AS?SELECT?*?FROM?TTT1;
        Materialized?view?created.
        ?
        -- 创建MView Log
        SQL>?CREATE?MATERIALIZED?VIEW?LOG?ON?TTT1;
        Materialized?view?log?created.
        ?
        -- 检查MView的对象
        SQL>?SELECT?OBJECT_NAME,?OBJECT_TYPE?FROM?ALL_OBJECTS?WHEREOBJECT_NAME?LIKE?'%TTT1%';
        OBJECT_NAME? ? ? ? ? ? ? ? ? ??OBJECT_TYPE
        ------------------------------ -------------------
        TTT1? ? ? ? ? ? ? ? ? ? ? ? ? ?TABLE
        MV_TTT1? ? ? ? ? ? ? ? ? ? ? ??MATERIALIZED?VIEW
        MV_TTT1? ? ? ? ? ? ? ? ? ? ? ??TABLE
        MLOG$_TTT1? ? ? ? ? ? ? ? ? ? ?TABLE
        USLOG$_MV_TTT1? ? ? ? ? ? ? ? ?TABLE
        ?
        -- 查看MView相关的INDEX
        SQL>?SELECT?INDEX_NAME,TABLE_NAME?FROM?USER_INDEXES?WHERE?TABLE_NAMELIKE?'%TTT1%';
        ?
        INDEX_NAME? ? ? ? ? ? ? ? ? ? ?TABLE_NAME
        ------------------------------ ------------------------------
        PK_TTT11? ? ? ? ? ? ? ? ? ? ? ?MV_TTT1
        PK_TTT1? ? ? ? ? ? ? ? ? ? ? ??TTT1
        ?
        -- 查看内部触发器
        SQL>?SELECT?*?FROM?USER_INTERNAL_TRIGGERS?WHERE?TABLE_NAME?LIKE'%TTT1%';
        TABLE_NAME? ? ? ? ? ? ? ? ? ? ?INTERNAL_TRIGGER_TY
        ------------------------------ -------------------
        MV_TTT1? ? ? ? ? ? ? ? ? ? ? ??UPDATABLE?MVIEW?LOG
        TTT1? ? ? ? ? ? ? ? ? ? ? ? ? ?MVIEW?LOG本文采用知识共享署名-非商业性使用-相同方式共享 3.0 Unported许可协议发布,转载请保留此信息?
        作者:马齿苋 | 链接:http://www.dbabeta.com/2009/mview_step_by_step_01.html

热点排行