文章詳情頁(yè)
Oracle的實(shí)體化視圖管理
瀏覽:6日期:2023-11-18 13:54:08
;Oracle的實(shí)體化視圖治理作者: CCBZZP1. 實(shí)體化視圖概念 ;實(shí)體化視圖治理是用于匯總,預(yù)計(jì)算,復(fù)制或分發(fā)數(shù)據(jù)的對(duì)象, 在大型的數(shù)據(jù)庫(kù)中使用它可以提高涉及到的SUM,COUNT,AVG,MIN,MAX等的表的查詢的速度,只要在實(shí)體化視圖治理上創(chuàng)建了統(tǒng)計(jì),查詢優(yōu)化器將自動(dòng)的使用實(shí)體化視圖治理,這特性被稱為QUERY REWRITE(查詢重寫(xiě)).與普通的視圖不同的是實(shí)體化視圖治理存儲(chǔ)數(shù)據(jù),占據(jù)數(shù)據(jù)庫(kù)的物理空間的. 創(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=TRUE2. 創(chuàng)建實(shí)體化視圖注重事項(xiàng): 創(chuàng)建之后,是否要填寫(xiě)數(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ù)的完整性的問(wèn)題,對(duì)于這種情況,建議把相關(guān)聯(lián)的實(shí)體化視圖放在同一個(gè)刷新組中,協(xié)調(diào)進(jìn)行刷新. DBMS_REFRESH軟件包中提供MAKE過(guò)程來(lái)創(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通過(guò)一個(gè)參數(shù)來(lái)傳遞給過(guò)程的.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)該很大的. 通過(guò)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過(guò)程,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;13. 也可以用OEM來(lái)創(chuàng)建和治理實(shí)體化視圖
標(biāo)簽:
Oracle
數(shù)據(jù)庫(kù)
排行榜
