物化檢視梳理總結

dbhelper發表於2014-11-27
--物化檢視可以分為三種型別:
* 包含聚集的物化檢視
* 只包含連線的物化檢視
* 巢狀物化檢視
三種物化檢視的快速重新整理的限制條件有很大區別,而對於其他方面則區別不大。

--物化檢視建立方式(Build Methods),包括BUILD IMMEDIATE和BUILD DEFERRED兩種。
* BUILD IMMEDIATE是在建立物化檢視的時候就生成資料,
* BUILD DEFERRED則在建立時不生成資料,以後根據需要在生成資料。
預設為BUILD IMMEDIATE。

--物化檢視查詢重寫(Query Rewrite),包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE兩種。
分別指出建立的物化檢視是否支援查詢重寫。
查詢重寫是指當對物化檢視的基表進行查詢時,Oracle會自動判斷能否透過查詢物化視
圖來得到結果,如果可以,則避免了聚集或連線操作,而直接從已經計算好的物化檢視
中讀取資料。預設為DISABLE QUERY REWRITE。

在建立物化檢視的時候可以指定ORDER BY語句,使生成的資料按照一定的順序進行儲存。不
過這個語句不會寫入物化檢視的定義中,而且對以後的重新整理也無效。

--物化檢視資料的重新整理模式:
 僅在該物化檢視“需要”被重新整理了,才進行重新整理(REFRESH),即更新物化檢視,
以保證和基表資料的一致性;
 基表有了COMMIT,即事務提交,則立刻重新整理,立刻更新物化檢視,使得資料
和基表一致
二者的區別在於重新整理方法的不同。

--重新整理的方法有四種:FAST、COMPLETE、FORCE和NEVER。
FAST重新整理採用增量重新整理,只重新整理自上次重新整理以後進行的修改。
COMPLETE重新整理對整個物化檢視進行完全的重新整理。
如果選擇FORCE方式,則Oracle在重新整理時會去判斷是否可以進行快速重新整理,如果可以則採用FAST方式,否則採用COMPLETE的方式。
NEVER指物化檢視不進行任何重新整理。

--物化檢視日誌
如果需要進行'快速重新整理',則需要建立物化檢視日誌。
物化檢視日誌根據不同物化檢視的快速重新整理的需要,可以建立為ROWID或PRIMARY KEY型別的。
還可以選擇是否包括SEQUENCE、INCLUDING NEW VALUES以及指定列的列表。
可以指明ON PREBUILD TABLE語句將物化檢視建立在一個已經存在的表上。這種情況下,物化
檢視和表必須同名。當刪除物化檢視時,不會刪除同名的表。這種物化檢視的查詢重寫要求參
數QUERY_REWRITE_INTEGERITY必須設定為trusted或者stale_tolerated。

--物化檢視分割槽
基於分割槽的物化檢視可以支援分割槽變化跟蹤(PCT)。具有這種特性的物化檢視,當基表進行了分
區維護操作後,仍然可以進行快速重新整理操作。對於聚集物化檢視,可以在GROUP BY列表中使用
CUBE或ROLLUP,來建立不同等級的聚集物化檢視。

--物化檢視的手工重新整理:
重新整理指定的物化檢視
execute dbms_mview.refresh('MV_TEST'); 
重新整理利用了該表的所有物化檢視
execute dbms_mview.refresh_defresh_dependent('TEST'); 
重新整理該模式中,自上次重新整理以來,未得到重新整理的所有物化檢視
execute dbms_mview.refresh_all_mviews;

--物化檢視的特點:
* 物化檢視在某種意義上說就是一個物理表(而且不僅僅是一個物理表);
* 物化檢視也是一種段(segment),所以其有自己的物理儲存屬性;
* 物化檢視會佔用資料庫磁碟空間;

--設定init.ora的引數:
使用物化檢視:
JOB_QUEUE_PROCESSES,必須設定大於 1。
QUERY_REWRITE_ENABLED,設定為TRUE時,允許動態重寫查詢。
QUERY_REWRITE_INTEGRITY,確定訪問物化檢視時資料一致性要遵守的程度。
OPTIMIZER_MODE,必須設定成CBO的某種方式。
禁用物化檢視:
修改init.ora引數的query_rewrite_enabled引數設定成flase,重啟例項。
使用alter system set query_rewrite_enabled = flase;動態修改。
使用alter session set query_rewrite_enabled = flash;修改會話內。
使用 norewrite提示。

--------------------------------------------------------------------------------------
源宿主:y,目標宿主:m
1、源表
create table y.test(id varchar2(10) primary key ,name varchar2(20));
2、物化檢視日誌
建立:
create materialized view log on y.test [tablespace MV_DATA WITH ROWID, sequence(seq_tid)];
刪除:
drop materialized view log on test;
2、物化檢視
建立:
  CREATE MATERIALIZED VIEW m.mv_test [tablespace mview_data]
 BUILD IMMEDIATE
 REFRESH FORCE 
 ON DEMAND  --重新整理模式,預設值,可以不寫
 START WITH SYSDATE
 NEXT SYSDATE+2/1444
 WITH PRIMARY KEY
 DISABLE QUERY REWRITE  --查詢重寫,預設值,可以不寫
 AS
 SELECT * FROM y.test;
刪除:
  drop materialized view m.mv_test;












來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-1349506/,如需轉載,請註明出處,否則將追究法律責任。

相關文章