您好,登錄后才能下訂單哦!
Oracle物化視圖的創(chuàng)建及使用
http://blog.csdn.net/tegwy/article/details/8935058
先看簡(jiǎn)單創(chuàng)建語(yǔ)句:
create materialized view mv_materialized_test refresh force on demand start with sysdate next
to_date( concat (to_char( sysdate + 1 , 'dd-mm-yyyy' ), '10:25:00' ), 'dd-mm-yyyy hh34:mi:ss' ) as
select * from user_info; --這個(gè)物化視圖在每天10:25進(jìn)行刷新
物化視圖也是種視圖。 Oracle的物化視圖是包括一個(gè)查詢(xún)結(jié)果的數(shù)據(jù)庫(kù)對(duì)像,它是遠(yuǎn)程數(shù)據(jù)的的本地副本,或者用來(lái)生成基于數(shù)據(jù)表求和的匯總表。物化視圖存儲(chǔ)基于遠(yuǎn)程表的數(shù)據(jù),也可以稱(chēng)為快照。
物化視圖可以查詢(xún)表,視圖和其它的物化視圖。
特點(diǎn):
(1) 物化視圖在某種意義上說(shuō)就是一個(gè) 物理表 (而且不僅僅是一個(gè)物理表),這通過(guò)其可以被user_tables查詢(xún)出來(lái),而得到確認(rèn);
(2) 物化視圖也是一種段(segment),所以其有自己的物理存儲(chǔ)屬性;
(3) 物化視圖會(huì)占用數(shù)據(jù)庫(kù)磁盤(pán)空間,這點(diǎn)從user_segment的查詢(xún)結(jié)果,可以得到佐證;
創(chuàng)建語(yǔ)句:create materialized view mv_name as select * from table_name
因?yàn)槲锘晥D由于是物理真實(shí)存在的,故可以創(chuàng)建索引。
創(chuàng)建時(shí)生成數(shù)據(jù):
分為兩種: build immediate 和 build deferred ,
build immediate是在 創(chuàng)建物化視圖的時(shí)候就生成數(shù)據(jù) 。
build deferred 則在創(chuàng)建時(shí)不生成數(shù)據(jù),以后根據(jù)需要在生成數(shù)據(jù) 。
如果不指定,則默認(rèn)為 build immediate 。
刷新模式:
物化視圖有二種刷新模式:
在創(chuàng)建時(shí)refresh mode是 on demand 還是 on commit 。
on demand 顧名思義,僅在該物化視圖“需要”被刷新了,才進(jìn)行刷新(REFRESH),即更新物化視圖,以保證和基表數(shù)據(jù)的一致性;
on commit 提交觸發(fā),一旦基表有了commit,即事務(wù)提交,則立刻刷新,立刻更新物化視圖,使得數(shù)據(jù)和基表一致。一般用這種方法在操作基表時(shí)速度會(huì)比較慢。
創(chuàng)建物化視圖時(shí)未作指定,則Oracle按 on demand 模式來(lái)創(chuàng)建。
上面說(shuō)的是 刷新模式 ,針對(duì)于如何刷新,則有如下三種 刷新方法 :
完全刷新(COMPLETE): 會(huì)刪除表中所有的記錄(如果是單表刷新,可能會(huì)采用TRUNCATE的方式),然后根據(jù)物化視圖中查詢(xún)語(yǔ)句的定義重新生成物化視圖。
快速刷新(FAST): 采用增量刷新的機(jī)制,只將自上次刷新以后對(duì)基表進(jìn)行的所有操作刷新到物化視圖中去。FAST必須創(chuàng)建基于主表的視圖日志。對(duì)于增量刷新選項(xiàng),如果在子查詢(xún)中存在分析函數(shù),則物化視圖不起作用。
FORCE方式: 這是默認(rèn)的數(shù)據(jù)刷新方式。Oracle會(huì)自動(dòng)判斷是否滿(mǎn)足快速刷新的條件,如果滿(mǎn)足則進(jìn)行快速刷新,否則進(jìn)行完全刷新。
關(guān)于快速刷新: Oracle物化視圖的 快速刷新 機(jī)制是通過(guò) 物化視圖日志 完成的。 Oracle通過(guò)一個(gè)物化視圖日志還可以支持多個(gè)物化視圖的快速刷新 。 物化視圖日志根據(jù)不同物化視圖的快速刷新的需要,可以建立為ROWID或PRIMARY KEY類(lèi)型的 。還可以選擇是否包括SEQUENCE、INCLUDING NEW VALUES以及指定列的列表。
查詢(xún)重寫(xiě)(QueryRewrite):
包括 enable query rewrite 和 disable query rewrite 兩種。
分別指出創(chuàng)建的物化視圖是否支持查詢(xún)重寫(xiě)。 查詢(xún)重寫(xiě)是指當(dāng)對(duì)物化視圖的基表進(jìn)行查詢(xún)時(shí) , oracle會(huì)自動(dòng)判斷能否通過(guò)查詢(xún)物化視圖來(lái)得到結(jié)果,如果可以,則避免了聚集或連接操作,而直接從已經(jīng)計(jì)算好的物化視圖中讀取數(shù)據(jù)。
默認(rèn)為 disable query rewrite 。
語(yǔ)法:
create materialized view view_name
refresh [ fast|complete|force ]
[
on [commit|demand ] |
start with (start_time) next (next_time)]
AS subquery;
具體操作
創(chuàng)建物化視圖需要的權(quán)限:
grant create materialized view to user_name;
在源表建立 物化視圖日志 :
create materialized view log on test_table
tablespace test_space -- 日志空間
with primary key ; -- 指定為主鍵類(lèi)型
在目標(biāo)數(shù)據(jù)庫(kù)上創(chuàng)建MATERIALIZED VIEW:
create materialized view mv_materialized_test refresh force on demand start with sysdate next
to_date( concat (to_char( sysdate + 1 , 'dd-mm-yyyy' ), '10:25:00' ), 'dd-mm-yyyy hh34:mi:ss' ) as
select * from user_info; --這個(gè)物化視圖在每天10:25進(jìn)行刷新
修改刷新時(shí)間:
alter materialized view mv_materialized_test refresh force on demand start with sysdate
next to_date( concat (to_char( sysdate + 1 , 'dd-mm-yyyy' ), ' 23:00:00' ), 'dd-mm-yyyy hh34:mi:ss' );
或
alter materialized view mv_materialized_test refresh force on demand start with sysdate
next trunc ( sysdate , 'dd' )+ 1 + 1 / 24 ; -- 每天1點(diǎn)刷新
建立索引:
create index IDX_MMT_IU_TEST
on mv_materialized_test( ID ,UNAME)
tablespace test_space;
刪除物化視圖及日志:
drop materialized view log on test_table; --刪除物化視圖日志:
drop materialized view mv_materialized_test; --刪除物化視圖
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。