物化视图日志与增量刷新

一、    物化视图日志结构

Oracle 的物化视图的快速刷新要求必须建立物化视图日志,通过物化视图日志可以实现增量刷新功能。

物化视图日志的名称为MLOG$_面跟基表的名称,如果表名的长度超过20位,则只取前20位,当截短后出现名称重复时,Oracle会自动在物化视图日志名称后面加上数字作为序号。

      物化视图日志在建立时有多种选项:可以指定为ROWIDPRIMARY KEYOBJECT ID几种类型,同时还可以指定SEQUENCE或明确指定列名。上面这些情况产生的物化视图日志的结构都不相同。

 WITH 选项                

任何物化视图都会包括的4列:
SNAPTIME$$:用于表示刷新时间。
DMLTYPE$$:用于表示DML操作类型,I表示INSERTD表示DELETEU表示UPDATE
OLD_NEW$$:用于表示这个值是新值还是旧值。NEW)表示新值,OLD)表示旧值,U表示UPDATE操作。
CHANGE_VECTOR$$:表示修改矢量,用来表示被修改的是哪个或哪几个字段。
如果WITH后面跟了ROWID,则物化视图日志中会包含:M_ROW$$:用来存储发生变化的记录的ROWID
如果WITH后面跟了PRIMARY KEY,则物化视图日志中会包含主键列。
如果WITH后面跟了OBJECT ID,则物化视图日志中会包含:SYS_NC_OID$:用来记录每个变化对象的对象ID
如果WITH后面跟了SEQUENCE,则物化视图日子中会包含:SEQUENCE$$:给每个操作一个SEQUENCE号,从而保证刷新时按照顺序进行刷新。
如果WITH后面跟了一个或多个COLUMN名称,则物化视图日志中会包含这些列。使用with column将自动添加主键,不能再添加primary key选项否则报如下错误:

SQL> create materialized view log on emp with(ename),primary key ;

 

create materialized view log on emp with(ename),primary key

 

ORA-00922: 选项缺失或无效

 

SQL> create materialized view log on emp with(ename) ;

 

Materialized view log created

OBJECT ID 仅针对object table

NEW VALUES选项

设置 including new values物化视图日志将旧值和新值,update将产生两条记录

二、    通过dbms_mview.explain_mview反向退出物化视图日志需要以上哪些选项

dbms_mview.explain_mview能帮助确认哪些是对物化视图是可行的哪些是不可行的,比如像物化视图是否可以增量刷新。增量刷新还需要什么条件,比如物化视图日志需要添加哪些选项。

dbms_mview.explain_mview支持查询语句,物化视图视图创建语句和物化视图,对于复杂的查询语句,可以先以BUILD DEFERRED方式创建,再使用dbms_mview.explain_mview进行分析

SQL> @$ORACLE_HOME/rdbms/admin/utlxmv.sql

 

Table created.

SQL> desc mv_capabilities_table

Name            Type           Nullable Default Comments

--------------- -------------- -------- ------- --------

STATEMENT_ID    VARCHAR2(30)   Y                        

MVOWNER         VARCHAR2(30)   Y                        

MVNAME          VARCHAR2(30)   Y                        

CAPABILITY_NAME VARCHAR2(30)   Y                        

POSSIBLE        CHAR(1)        Y                        

RELATED_TEXT    VARCHAR2(2000) Y                        

RELATED_NUM     NUMBER         Y                        

MSGNO           INTEGER        Y                        

MSGTXT          VARCHAR2(2000) Y                        

SEQ             NUMBER         Y  

SQL> exec dbms_mview.explain_mview('MV_EMP');

 

PL/SQL procedure successfully completed

 

SQL> commit;

 

Commit complete

 

SQL> select * from mv_capabilities_table;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SQL> select * from MV_CAPABILITIES_TABLE ;

 

STATEMENT_ID                   MVOWNER                        MVNAME                         CAPABILITY_NAME                POSSIBLE RELATED_TEXT                                                                     RELATED_NUM                                   MSGNO MSGTXT                                                                                  SEQ

------------------------------ ------------------------------ ------------------------------ ------------------------------ -------- -------------------------------------------------------------------------------- ----------- --------------------------------------- -------------------------------------------------------------------------------- ----------

                               EOSADMIN                       MV_TCHOSPDAYDETAILH            PCT                            Y                                                                                                                                                                                                                                       1

                               EOSADMIN                       MV_TCHOSPDAYDETAILH            REFRESH_COMPLETE               Y                                                                                                                                                                                                                                    1002

                               EOSADMIN                       MV_TCHOSPDAYDETAILH            REFRESH_FAST                   N                                                                                                                                                                                                                                    2003

                               EOSADMIN                       MV_TCHOSPDAYDETAILH            REWRITE                        N                                                                                                                                                                                                                                    3004

                               EOSADMIN                       MV_TCHOSPDAYDETAILH            PCT_TABLE                      Y        TCHOSPDAYDETAILH                                                                         434                                                                                                                                4005

                               EOSADMIN                       MV_TCHOSPDAYDETAILH            REFRESH_FAST_AFTER_INSERT      N        EOSADMIN.TCHOSPDAYDETAILH                                                                                                       2081 mv log does not have all necessary columns                                             5006

                               EOSADMIN                       MV_TCHOSPDAYDETAILH            REFRESH_FAST_AFTER_INSERT      N                                                                                                                                        2164 the materialized view is BUILD DEFERRED                                                5007

                               EOSADMIN                       MV_TCHOSPDAYDETAILH            REFRESH_FAST_AFTER_ONETAB_DML  N        FSCALESELFEE                                                                             393                                    2143 SUM(expr) without COUNT(expr)                                                          6008

                               EOSADMIN                       MV_TCHOSPDAYDETAILH            REFRESH_FAST_AFTER_ONETAB_DML  N        FOVERPRICESELFEE                                                                         343                                    2143 SUM(expr) without COUNT(expr)                                                          6009

                               EOSADMIN                       MV_TCHOSPDAYDETAILH            REFRESH_FAST_AFTER_ONETAB_DML  N        SELFPAYMONEY                                                                             227                                    2143 SUM(expr) without COUNT(expr)                                                          6010

                               EOSADMIN                       MV_TCHOSPDAYDETAILH            REFRESH_FAST_AFTER_ONETAB_DML  N        TOTALMONEY                                                                               193                                    2143 SUM(expr) without COUNT(expr)                                                          6011

                               EOSADMIN                       MV_TCHOSPDAYDETAILH            REFRESH_FAST_AFTER_ONETAB_DML  N        SUMAMOUNT                                                                                162                                    2143 SUM(expr) without COUNT(expr)                                                          6012

                               EOSADMIN                       MV_TCHOSPDAYDETAILH            REFRESH_FAST_AFTER_ONETAB_DML  N                                                                                                                                        2146 see the reason why REFRESH_FAST_AFTER_INSERT is disabled                               6013

                               EOSADMIN                       MV_TCHOSPDAYDETAILH            REFRESH_FAST_AFTER_ONETAB_DML  N                                                                                                                                        2143 SUM(expr) without COUNT(expr)                                                          6014

                               EOSADMIN                       MV_TCHOSPDAYDETAILH            REFRESH_FAST_AFTER_ANY_DML     N        EOSADMIN.TCHOSPDAYDETAILH                                                                                                       2165 mv log does not have sequence #                                                        7015

                               EOSADMIN                       MV_TCHOSPDAYDETAILH            REFRESH_FAST_AFTER_ANY_DML     N                                                                                                                                        2161 see the reason why REFRESH_FAST_AFTER_ONETAB_DML is disabled                           7016

                               EOSADMIN                       MV_TCHOSPDAYDETAILH            REFRESH_FAST_PCT               N                                                                                                                                        2164 the materialized view is BUILD DEFERRED                                                8017

                               EOSADMIN                       MV_TCHOSPDAYDETAILH            REWRITE_FULL_TEXT_MATCH        N                                                                                                                                        2164 the materialized view is BUILD DEFERRED                                                9018

                               EOSADMIN                       MV_TCHOSPDAYDETAILH            REWRITE_PARTIAL_TEXT_MATCH     N                                                                                                                                        2164 the materialized view is BUILD DEFERRED                                               10019

                               EOSADMIN                       MV_TCHOSPDAYDETAILH            REWRITE_GENERAL                N                                                                                                                                        2164 the materialized view is BUILD DEFERRED                                               11020

 

STATEMENT_ID                   MVOWNER                        MVNAME                         CAPABILITY_NAME                POSSIBLE RELATED_TEXT                                                                     RELATED_NUM                                   MSGNO MSGTXT                                                                                  SEQ

------------------------------ ------------------------------ ------------------------------ ------------------------------ -------- -------------------------------------------------------------------------------- ----------- --------------------------------------- -------------------------------------------------------------------------------- ----------

                               EOSADMIN                       MV_TCHOSPDAYDETAILH            REWRITE_PCT                    N                                                                                                                                        2164 the materialized view is BUILD DEFERRED                                               12021

                               EOSADMIN                       MV_TCHOSPDAYDETAILH            PCT_TABLE_REWRITE              Y        TCHOSPDAYDETAILH                                                                         434                                                                                                                               13022

 

22 rows selected

请使用浏览器的分享功能分享到微信等