【Oracle】實體化視圖


1、老菜鳥露怯

  公司最近有個比較大的項目需要支援,左顧右盼生光輝,我就去了。被安排搞數據庫接口這塊,這就是坑的背景。

  有天需要把數據插入Oracle中間庫的一個表里,插入時一直提示:ora-01732:此視圖的數據操縱操作非法。

  

  通過PLSQL Developer看了半天,也沒看出來有啥異常,路徑也確認在Tables目錄下;真是應驗了一句話:無知害死人。

2、度娘帶來的驚喜

  物化視圖也是種視圖。Oracle的物化視圖是包括一個查詢結果的數據庫對像,它是遠程數據的的本地副本,或者用來生成基於數據表求和的匯總表。物化視圖存儲基於遠程表的數據,也可以稱為快照。物化視圖可以查詢表,視圖和其它的物化視圖。

 2.1 創建物化視圖語句如下

CREATE MATERIALIZED VIEW VW_Table
        BUILD IMMEDIATE             --創建時立即刷新      
        REFRESH FORCE              --如果可以快速刷新則進行快速刷新,否則完全刷新        
        ON DEMAND                 --刷新方式          
        START WITH SYSDATE            --第一次刷新時間
        NEXT  SYSDATE+1/(24)          --刷新時間間隔
     AS SELECT 1 id,'A'name FROM dual;

  踩過的坑:創建視圖時去掉注釋;否則會有錯誤提示。

 2.2 查詢實例化視圖的信息 

select * from DBA_MVIEWS where MVIEW_NAME='VW_TABLE';

  踩過的坑:MVIEW_NAME需區分大小寫。

 2.3 修改刷新的頻率

ALTER MATERIALIZED VIEW VW_Table
       REFRESH FORCE 
       ON DEMAND 
       START WITH SYSDATE 
       NEXT SYSDATE+1/144;

 2.4 查詢物化視圖上次刷新時間

SELECT last_refresh_date FROM user_mviews 
WHERE mview_name = 'VW_TABLE';

 2.5 手動刷新物化視圖

BEGIN
   dbms_mview.refresh('VW_TABLE');
END;

 2.6 刪除物化視圖

DROP MATERIALIZED VIEW VW_TABLE;

 3、干巴巴的說明

 3.1 創建時生成數據:

  分為兩種:build immediate 和 build deferred

build immediate:是在創建物化視圖的時候就生成數據。
build deferred:則在創建時不生成數據,以后根據需要在生成數據。
如果不指定,則默認為build immediate

  3.2 刷新模式

  物化視圖有二種刷新模式:

  在創建時refresh mode是 on demand 還是 on commit

  on demand 顧名思義,僅在該物化視圖“需要”被刷新了,才進行刷新(REFRESH),即更新物化視圖,以保證和基表數據的一致性;

  on commit  提交觸發,一旦基表有了commit,即事務提交,則立刻刷新,立刻更新物化視圖,使得數據和基表一致。一般用這種方法在操作基表時速度會比較慢。

  創建物化視圖時未作指定,則Oracle按 on demand 模式來創建。

 


免責聲明!

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



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