欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Oracle普通視圖和物化視圖的區(qū)別及說明

 更新時間:2025年06月09日 11:01:15   作者:Aries·Zhao  
這篇文章主要介紹了Oracle普通視圖和物化視圖的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

物化視圖介紹

物化視圖是一種特殊的物理表,“物化”(Materialized)視圖是相對普通視圖而言的。

普通視圖是虛擬表,應(yīng)用的局限性大,任何對視圖的查詢,Oracle都實(shí)際上轉(zhuǎn)換為視圖SQL語句的查詢。

這樣對整體查詢性能的提高,并沒有實(shí)質(zhì)上的好處。

刷新的方法有四種:FAST、COMPLETE、FORCE和NEVER

FAST刷新采用增量刷新,只刷新自上次刷新以后進(jìn)行的修改。

COMPLETE刷新對整個物化視圖進(jìn)行完全的刷新。

FORCE方式,則Oracle在刷新時會去判斷是否可以進(jìn)行快速刷新,如果可以則采用FAST方式,否則采用COMPLETE的方式。

NEVER指物化視圖不進(jìn)行任何刷新。

物化視圖的類型:ON DEMAND、ON COMMIT

二者的區(qū)別在于刷新方法的不同:

ON DEMAND:僅在該物化視圖“需要”被刷新了,才進(jìn)行刷新(REFRESH),即更新物化視圖,以保證和基表數(shù)據(jù)的一致性;

/*默認(rèn)情況下,如果沒指定刷新方法和刷新模式,則Oracle默認(rèn)為FORCE和DEMAND。*/
create materialized view mv_tb as select * from tb_name;

/*指定物化視圖每天刷新一次*/
create materialized view mv_name refresh force on demand start with sysdate
next sysdate+1; 
/*要指定刷新時間比如每天晚上22:00定時刷新一次*/
create materialized view mv_name 
refresh force on demand 
start with sysdate 
next to_date( concat(to_char( sysdate+1,'dd-mm-yyyy'),' 22:00:00'),'dd-mm-yyyy hh24:mi:ss');

ON COMMIT:一旦基表有了COMMIT,即事務(wù)提交,則立刻刷新,立刻更新物化視圖,使得數(shù)據(jù)和基表一致。

/*創(chuàng)建ON COMMIT物化視圖*/
create materialized view mv_tb refresh force on commit as select * from tb_name

創(chuàng)建時生成數(shù)據(jù)分為兩種:build immediate 和 build deferred

分為兩種:build immediate 和 build deferred

  • build immediate 是在創(chuàng)建物化視圖的時候就生成數(shù)據(jù) 。
  • build deferred 則在創(chuàng)建時不生成數(shù)據(jù),以后根據(jù)需要在生成數(shù)據(jù)

如果不指定,則默認(rèn)為 build immediate

案例使用

我們?nèi)绻龅叫枰獜钠渌到y(tǒng)的數(shù)據(jù)庫中取數(shù)據(jù)進(jìn)行統(tǒng)計分析的問題,假如雙方數(shù)據(jù)庫都是ORACLE11g,同步表:test_mz_fee

1、創(chuàng)建DB_LINK

/*創(chuàng)建DB_LINK*/
create public database link dblink_his connect to system using '192.168.1.73:1521/oracle';
/*刪除DB_LINK*/
drop database link dblink_his; 
/*刪除的時候報錯:ORA-02018:database link of same name has an open connection*/
/*關(guān)閉dblink:*/
alter session close database link dblink_his;

2、創(chuàng)建Oracle物化視圖快速刷新日志

為配合增量刷新,ORACLE要求要在住表上建立物化視圖日志。

create materialized view log on test_mz_fee with primary key  including new values;  

3、創(chuàng)建Oracle物化視圖

Oracle物化視圖,從名字上面來開,它應(yīng)該是屬于視圖,但是確實(shí)物化。

其物化是針對普通視圖并沒有真正的物理存儲而言,其實(shí)可以簡單的把物化視圖看做一個物理表。

create materialized view mv_test_mz_fee /*創(chuàng)建物化視圖*/  
 build immediate  /*在視圖編寫好后創(chuàng)建*/  
  refresh fast with primary key  /*根據(jù)主表主鍵增量刷新(fast,增量)  */
 on demand  /*在用戶需要時,由用戶刷新 */ 
  enable query rewrite  /*可讀寫*/  
 as  
 select * from test_mz_fee@dblink_his; /*查詢語句*/

4、視圖刷新

選擇使用ORACLE自帶工具DBMS_MVIEW工具包中REFRESH方法對物化視圖進(jìn)行刷新。

該方法有兩個參數(shù),第一個參數(shù)是需要刷新的物化視圖名稱,第二個參數(shù)是刷新方式。

我們可以寫存儲過來,對每個物化視圖調(diào)用一次REFRESH方法,也可以使用“,”把物化視圖連接以來,一次刷新。如下:*/

create or replace procdure p_mview_refresh as  
begin  
dbms_mview.refresh('mv_test_mz_fee','f');  
end p_mview_refresh;  
 
/*方式2*/
create or replace procdure p_mview_refresh as  
begin  
dbms_mview.refresh('mv_test_mz_fee1,mv_test_mz_fee2','ff');
end p_mview_refresh;  

注意:

  • 如果需要同時刷新多個物化視圖,必須用逗號把各個物化視圖名稱連接起來,并對每個視圖都要指明刷新方式(f、增量刷新,c、完全刷新,?、強(qiáng)制刷新)。
  • 當(dāng)日志和物化視圖創(chuàng)建好后,刪除日志,則需要重新創(chuàng)建物化視圖,否則無法增量刷新。
  • 因?yàn)樯厦鎸懙奈锘晥D時根據(jù)主鍵進(jìn)行更新,因此,主表必須有主鍵。*/

5、日志和物化視圖要刪除

drop materialized view log on test_mz_fee@dblink_his;  
drop materialized view mv_test_mz_fee1;  

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論