實(shí)體化視圖管理是用于匯總,預(yù)計(jì)算,復(fù)制或分發(fā)數(shù)據(jù)的對(duì)象, 在大型的數(shù)據(jù)庫中使用它可以提高涉及到的SUM,COUNT,AVG,MIN,MAX等的表的查詢的速度,只要在實(shí)體化視圖管理上創(chuàng)建了統(tǒng)計(jì),查詢優(yōu)化器將自動(dòng)的使用實(shí)體化視圖管理,這特性被稱為QUERY REWRITE(查詢重寫).與普通的視圖不同的是實(shí)體化視圖管理存儲(chǔ)數(shù)據(jù),占據(jù)數(shù)據(jù)庫的物理空間的.
創(chuàng)建實(shí)體化視圖管理的用戶的權(quán)限必須有: CREATE MATERIALZED VIEW,CREATE TABLE,CREATE VIEW,SELECT等,如果在其他的模式中創(chuàng)建的話要在表上有CREATE ANY MATERIALIZED VIEW和SELECT權(quán)限.
要查詢重引用別的模式中的實(shí)體化視圖管理的話,還要有引用的表的GLOBAL QUERY REWRITE OR QUERY REWRITE權(quán)限.
如果計(jì)劃使用實(shí)體化視圖管理的話,要修改參數(shù)文件中加: QUERY_REWRITE_ENABLE=TRUE
2. 創(chuàng)建實(shí)體化視圖注意事項(xiàng):
創(chuàng)建之后,是否要填寫數(shù)據(jù)
多長(zhǎng)時(shí)間刷新一次
使用那種刷新類型: COMPLE(完全),FAST(快速),FORCE(強(qiáng)制),NEVER(從不)
3. 創(chuàng)建實(shí)體化視圖
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. 刪除實(shí)體化視圖
DROP MATERIALIZED VIEW TEST3;
5. 管理和評(píng)估實(shí)體化視圖的工具
要運(yùn)行DBMSSNAP.SQL和DBMSSUM.SQL為實(shí)體化視圖創(chuàng)建包DBMS_MVIEW和DBMS_OLAP
DBMS_MVIEW用于執(zhí)行管理活動(dòng)的.
DBMS_OLAP確定實(shí)體化視圖是否能提高查詢的性能.
6. 刷新實(shí)體化視圖的方法
EXECUTE DBMS_MVIEW.REFRESH('TEST3','C');
其中TEST3為實(shí)體化視圖名稱,'C'為刷新類型中的一種.
刷新類型有: C-完全刷新
F-快速刷新和強(qiáng)制刷新
EXECUTE DBMS_MVIEW.REFRESH_ALL
不接受任何參數(shù),全部刷新.
7. 實(shí)體化視圖間的完整性
在實(shí)體化視圖互相嵌套的時(shí)候會(huì)用不同的實(shí)體化視圖的刷新的方式和時(shí)間的不同而引起的數(shù)據(jù)的完整性的問題,對(duì)于這種情況,建議把相關(guān)聯(lián)的實(shí)體化視圖放在同一個(gè)刷新組中,協(xié)調(diào)進(jìn)行刷新.
DBMS_REFRESH軟件包中提供MAKE過程來創(chuàng)建一個(gè)刷新組.
例如:
EXECUTE DBMS_REFRESH.MAKE
(NAME=>'TEST_GROUP',
LIST=>'LOC_EMP,LOC_DPT',
NEXT_DATE=>SYSDATE,
INTERVAL=>'SYSDATE+7');
上面創(chuàng)建一個(gè)實(shí)體化視圖刷新組TEST_GROUP,刷新周期為7天一次的.
兩個(gè)實(shí)體化視圖LOC_EMP和LOC_DPT通過一個(gè)參數(shù)來傳遞給過程的.
8. 向刷新組中增加刷新的實(shí)體化視圖
DBMS_REFRESH.ADD
(NAME IN VARCHAR2,
LIST IN VARCHAR2,|
TAB IN DBMS_UTILITY.UNCLARRAY,
LAX IN BOOLEAN:=FALSE);
9. 向刷新組中刪除刷新的實(shí)體化視圖
DBMS_REFRESH.SUBTRACT
(NAME IN VARCHAR2,
LIST IN VARCHAR2,|
TAB IN DBMS_UTILITY.UNCLARRAY,
LAX IN BOOLEAN:=FALSE);
10. 手工刪除一個(gè)刷新組
EXECUTE DBMS_REFRESH.REFRESH('TEST_GROUP');
也可以
EXECUTE DBMS_REFRESH.DESTROY(NAME=>'TEST_GROUP');
11. 實(shí)體化視圖的日志管理
實(shí)體化視圖日志是一個(gè)表,保持對(duì)實(shí)體化視圖操作的歷史記錄.
要?jiǎng)?chuàng)建實(shí)體化視圖日志必須能在表上創(chuàng)建AFTER ROW觸發(fā)器,必須有CREATE TRIGGER,CREATE TABLE權(quán)限
例如:
CREATE MATERIALIZED VIEW LOG ON BSEMPMS
TABLESPACE DATA_TEST
STORAGE(INITIAL 1M NEXT 1M PCTINCREASE 0)
PCTFREE 5 PCTUSED 90;
實(shí)體化視圖日志的PCTFREE應(yīng)該很小,PCTUSED應(yīng)該很大的.
通過ALTER MATERIALIZED VIEW LOG命令可以修改實(shí)體化視圖日志參數(shù).
如:
ALTER MATERIALIZED VIEW LOG BSEMPMS PCTFREE 1;
要撤銷實(shí)體化視圖日志,可以用DROP MATERIALIZED VIEW LOG命令
如:
DROP MATERIALIZED VIEW LOG ON BSEMPMS;
12. 清除實(shí)體化視圖日志
要減少實(shí)體化視圖日志使用的空間,可用DBMS_MVIEW軟件包中的PURGE_LOG過程,PURGE_LOG有三個(gè)參數(shù):
主表名稱,NUM變量,DELETE標(biāo)志
NUM指最近最少刷新的實(shí)體化視圖數(shù)量
例如:
EXECUTE DBMS_MVIEW.PURGE_LOG
(MATER=>'BSEMPMS',
NUM=>1,
FLAG=>'DELETE');
BSEMPMS表的實(shí)體化視圖將清除實(shí)體化視圖最近最少使用的條目.
要在截?cái)嘀鞅淼臅r(shí)候而不丟失實(shí)體化視圖日志條目,可以用命令
TRUNCATE TABLE BSEMPMS PRESERVE MATERIALIZED VIEW LOG;
posted on 2008-07-14 18:29
有貓相伴的日子 閱讀(444)
評(píng)論(0) 編輯 收藏 所屬分類:
BI