PLSQL_Oracle物化視圖Material View的基本概念和用法 (概念)


2014-06-08 Created By BaoXinjian

1. 用法


物化視圖是包括一個查詢結果的數據庫對象,它是遠程數據的的本地副本,或者用來生成基於數據表求和的匯總表。

物化視圖存儲基於遠程表的數據,也可以稱為快照。對於復制,物化視圖允許你在本地維護遠程數據的副本,這些副本是只讀的。

如果你想修改本地副本,必須用高級復制的功能。當你想從一個表或視圖中抽取數據時,你可以用從物化視圖中抽取。

對於數據倉庫,創建的物化視圖通常情況下是聚合視圖,單一表聚合視圖和連接視圖。    

實現兩個數據庫之間的數據同步,可以存在時間差。

1. 刷新的方式

Fast

Complete

Fource

2. 刷新的方法

DBMS_REFRESH.Refresh

DBMS_MVIEW.Refresh

 

2. 具體應用


    (1).在源數據庫建立mview log日志文件

        create materialized view log on w_1 ;

----注:(TEST為表名或者視圖名,關於視圖上建立物化視圖,見基於視圖的物化視圖

----創建物化視圖語句:

    (2).在統計數據建立materializad view  語法    

Create materialized view MV_TEST

----MVTEST為物化視圖名

Build immediate

----創建時生成數據對應的是build deferred

Refresh fast

----增量刷新

On commit

----在基表有更新時提交,這里該句對視圖無效

With rowid

----這里創建基於rowid的物化視圖,對應的是 primary key

As

Select * from TEST;

----生成物化視圖數據語句

    (3).調用時進行刷新

        dbms_refresh.refresh('W_1')

 

3. 語法


 1. 基本語法

    

4. 案例


案例: 創建三種刷新方式的物化視圖, 並創建日志,通過dbms_job定時refresh mview group

Step1. 創建三個實體表

CREATE TABLE bxj_objects_t1 ( owner, object_name, subobject_name, object_id PRIMARY KEY, data_object_id, object_type, created, last_ddl_time, timestamp, status, temporary, generated, secondary, namespace, edition_name ) AS SELECT * FROM all_objects; CREATE TABLE bxj_objects_t2 ( owner, object_name, subobject_name, object_id PRIMARY KEY, data_object_id, object_type, created, last_ddl_time, timestamp, status, temporary, generated, secondary, namespace, edition_name ) AS SELECT * FROM all_objects; CREATE TABLE bxj_objects_t3 ( owner, object_name, subobject_name, object_id PRIMARY KEY, data_object_id, object_type, created, last_ddl_time, timestamp, status, temporary, generated, secondary, namespace, edition_name ) AS SELECT * FROM all_objects;

 

Step2. 創建物化視圖日志

CREATE MATERIALIZED VIEW LOG ON bxj_objects_t1; CREATE MATERIALIZED VIEW LOG ON bxj_objects_t2; CREATE MATERIALIZED VIEW LOG ON bxj_objects_t3;

 

select * from DBA_MVIEW_lOGS select * from MLOG$_BXJ_OBJECTS_T1 select * from MLOG$_BXJ_OBJECTS_T2 select * from MLOG$_BXJ_OBJECTS_T3

 

Step3. 創建物化視圖

CREATE MATERIALIZED VIEW bxj_objects_mv_t1 REFRESH FAST AS SELECT * FROM apps.bxj_objects_t1; CREATE MATERIALIZED VIEW bxj_objects_mv_t2 REFRESH FORCE AS SELECT * FROM bxj_objects_t2; CREATE MATERIALIZED VIEW bxj_objects_mv_t3 REFRESH COMPLETE AS SELECT * FROM bxj_objects_t3;

 

Step4. 創建物化視圖Refresh Group

EXEC DBMS_REFRESH.MAKE('REP_MVIEWGROUP', 'BXJ_OBJECTS_MV_T1,BXJ_OBJECTS_MV_T2,BXJ_OBJECTS_MV_T3', SYSDATE, 'SYSDATE + 1')

 

Step5. 刷新物化視圖

EXEC DBMS_MVIEW.refresh('BXJ_OBJECTS_MV_T1','C'); EXEC DBMS_REFRESH.refresh('REP_MVIEWGROUP');

 

 Step6. 加入dbms_jobs,定時刷新物化視圖

DECLARE jobno NUMBER; --通過查看該變量可以得到返回的作業編號 BEGIN DBMS_JOB.SUBMIT ( jobno, 'DBMS_REFRESH.refresh(''' || 'REP_MVIEWGROUP' || ''');', --執行腳本程序 SYSDATE, --現在執行 'SYSDATE+1' ); END;

 

Thanks and Regards


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM