Oracle的實体化視圖管理

发表于:2007-07-02来源:作者:点击数: 标签:
Oracle 的實体化視圖管理 作者: CC BZZP 1. 實体化視圖概念 實体化視圖管理是用于匯總,預計算,復制或分發數据的對象, 在大型的數据庫中使用它可以提高涉及到的SUM,COUNT,AVG, MI N,MAX等的表的查詢的速度,只要在實体化視圖管理上創建了統計,查詢优化器將自動

                 Oracle的實体化視圖管理

作者: CCBZZP


1. 實体化視圖概念
    實体化視圖管理是用于匯總,預計算,復制或分發數据的對象, 在大型的數据庫中使用它可以提高涉及到的SUM,COUNT,AVG,MIN,MAX等的表的查詢的速度,只要在實体化視圖管理上創建了統計,查詢优化器將自動的使用實体化視圖管理,這特性被稱為QUERY REWRITE(查詢重寫).与普通的視圖不同的是實体化視圖管理存儲數据,占据數据庫的物理空間的.
    創建實体化視圖管理的用戶的權限必須有: CREATE MATERIALZED VIEW,CREATE TABLE,CREATE VIEW,SELECT等,如果在其他的模式中創建的話要在表上有CREATE ANY MATERIALIZED VIEW和SELECT權限.
要查詢重引用別的模式中的實体化視圖管理的話,還要有引用的表的GLOBAL QUERY REWRITE OR QUERY REWRITE權限.
    如果計划使用實体化視圖管理的話,要修改參數文件中加: QUERY_REWRITE_ENABLE=TRUE

2. 創建實体化視圖注意事項:
   創建之后,是否要填寫數據
   多長時間刷新一次
   使用那种刷新類型: COMPLE(完全),FAST(快速),FORCE(強制),NEVER(從不)

3. 創建實体化視圖
   CREATE MATERIALIZED VIEW TEST3
   PCTFREE 0 TABLESPACE MTEST
   STORAGE (INITIAL 1M NEXT 1M PCTINCREASE 0)
   BUILD DEFERRED
   REFRESH FAST ON COMMIT
   ENABLE QUERY REWRITE
   AS SELECT EMP_NO,SUM(QTY_PSC) AS QTY_PSC FROM BSEMPMS GROUP BY EMP_NO;

4. 刪除實体化視圖
   DROP MATERIALIZED VIEW TEST3;

5. 管理和評估實体化視圖的工具
   要運行DBMSSNAP.SQL和DBMSSUM.SQL為實体化視圖創建包DBMS_MVIEW和DBMS_OLAP
   DBMS_MVIEW用于執行管理活動的.
   DBMS_OLAP确定實体化視圖是否能提高查詢的性能.

6. 刷新實体化視圖的方法
   EXECUTE DBMS_MVIEW.REFRESH(@#TEST3@#,@#C@#);
   其中TEST3為實体化視圖名稱,@#C@#為刷新類型中的一种.
   刷新類型有: C-完全刷新
               F-快速刷新和強制刷新
   EXECUTE DBMS_MVIEW.REFRESH_ALL
   不接受任何參數,全部刷新.

7. 實体化視圖間的完整性
   在實体化視圖互相嵌套的時候會用不同的實体化視圖的刷新的方式和時間的不同而引起的數据的完整性的問題,對于這种情況,建議把相關聯的實体化視圖放在同一個刷新組中,協調進行刷新.
   DBMS_REFRESH軟件包中提供MAKE過程來創建一個刷新組.
   例如:
   EXECUTE DBMS_REFRESH.MAKE
   (NAME=>@#TEST_GROUP@#,
   LIST=>@#LOC_EMP,LOC_DPT@#,
   NEXT_DATE=>SYSDATE,
   INTERVAL=>@#SYSDATE+7@#);
   上面創建一個實体化視圖刷新組TEST_GROUP,刷新周期為7天一次的.
   兩個實体化視圖LOC_EMP和LOC_DPT通過一個參數來傳遞給過程的.

8. 向刷新組中增加刷新的實体化視圖
   DBMS_REFRESH.ADD
   (NAME IN VARCHAR2,
   LIST IN VARCHAR2,|
   TAB IN DBMS_UTILITY.UNCLARRAY,
   LAX IN BOOLEAN:=FALSE);
  
9. 向刷新組中刪除刷新的實体化視圖
   DBMS_REFRESH.SUBTRACT
   (NAME IN VARCHAR2,
   LIST IN VARCHAR2,|
   TAB IN DBMS_UTILITY.UNCLARRAY,
   LAX IN BOOLEAN:=FALSE);

10. 手工刪除一個刷新組
   EXECUTE DBMS_REFRESH.REFRESH(@#TEST_GROUP@#);
   也可以
   EXECUTE DBMS_REFRESH.DESTROY(NAME=>@#TEST_GROUP@#);
 
11. 實体化視圖的日志管理
   實体化視圖日志是一個表,保持對實体化視圖操作的歷史記錄.
   要創建實体化視圖日志必須能在表上創建AFTER ROW触發器,必須有CREATE TRIGGER,CREATE TABLE權限

   例如:
   CREATE MATERIALIZED VIEW LOG ON BSEMPMS
   TABLESPACE DATA_TEST
   STORAGE(INITIAL 1M NEXT 1M PCTINCREASE 0)
   PCTFREE 5 PCTUSED 90;
   實体化視圖日志的PCTFREE應該很小,PCTUSED應該很大的.
   通過ALTER MATERIALIZED VIEW LOG命令可以修改實体化視圖日志參數.
   如:
   ALTER MATERIALIZED VIEW LOG BSEMPMS PCTFREE 1;
   要撤銷實体化視圖日志,可以用DROP MATERIALIZED VIEW LOG命令
   如:
   DROP MATERIALIZED VIEW LOG ON BSEMPMS;

12. 清除實体化視圖日志
   要減少實体化視圖日志使用的空間,可用DBMS_MVIEW軟件包中的PURGE_LOG過程,PURGE_LOG有三個參數:
   主表名稱,NUM變量,DELETE標志
   NUM指最近最少刷新的實体化視圖數量
   例如:
   EXECUTE DBMS_MVIEW.PURGE_LOG
   (MATER=>@#BSEMPMS@#,
      NUM=>1,
      FLAG=>@#DELETE@#);
   BSEMPMS表的實体化視圖將清除實体化視圖最近最少使用的條目.
   要在截斷主表的時候而不丟失實体化視圖日志條目,可以用命令 
   TRUNCATE TABLE BSEMPMS PRESERVE MATERIALIZED VIEW LOG;

13. 也可以用OEM來創建和管理實体化視圖
   

原文转自:http://www.ltesting.net