国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
物化視圖與數(shù)據(jù)遷移
物化視圖知識入門
Oracle的物化視圖提供了強大的功能,可以用在不同的環(huán)境中。在不同的環(huán)境中,物化視圖的作用也不相同.
數(shù)據(jù)倉庫中的物化視圖主要用于預(yù)先計算并保存表連接或聚集等耗時較多的操作的結(jié)果,這樣,在執(zhí)行查詢時,就可以避免進行這些耗時的操作,而從快速的得到結(jié)果。在數(shù)據(jù)倉庫中,還經(jīng)常使用查詢重寫(query rewrite)機制,這樣不需要修改原有的查詢語句,Oracle會自動選擇合適的物化視圖進行查詢,完全對應(yīng)用透明。
物化視圖和表一樣可以直接進行查詢。物化視圖可以基于分區(qū)表,物化視圖本身也可以分區(qū)。
除了在數(shù)據(jù)倉庫中使用,物化視圖還用于復(fù)制、移動計算等方面。
物化視圖有很多方面和索引很相似:使用物化視圖的目的是為了提高查詢性能;物化視圖對應(yīng)用透明,增加和刪除物化視圖不會影響應(yīng)用程序中SQL語句的正確性和有效性;物化視圖需要占用存儲空間;當(dāng)基表發(fā)生變化時,物化視圖也應(yīng)當(dāng)刷新。
物化視圖可以分為以下三種類型:包含聚集的物化視圖;只包含連接的物化視圖;嵌套物化視圖。三種物化視圖的快速刷新的限制條件有很大區(qū)別,而對于其他方面則區(qū)別不大。
創(chuàng)建物化視圖時可以指定多種選項,下面對幾種主要的選擇進行簡單說明:
> 創(chuàng)建方式(Build Methods):包括BUILD IMMEDIATE和BUILD DEFERRED兩種。BUILD IMMEDIATE是在創(chuàng)建物化視圖的時候就生成數(shù)據(jù),而BUILD DEFERRED則在創(chuàng)建時不生成數(shù)據(jù),以后根據(jù)需要在生成數(shù)據(jù)。默認(rèn)為BUILD IMMEDIATE。
> 查詢重寫(Query Rewrite):包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE兩種。分別指出創(chuàng)建的物化視圖是否支持查詢重寫。查詢重寫是指當(dāng)對物化視圖的基表進行查詢時,Oracle會自動判斷能否通過查詢物化視圖來得到結(jié)果,如果可以,則避免了聚集或連接操作,而直接從已經(jīng)計算好的物化視圖中讀取數(shù)據(jù)。默認(rèn)為DISABLE QUERY REWRITE。
> 刷新(Refresh):指當(dāng)基表發(fā)生了DML操作后,物化視圖何時采用哪種方式和基表進行同步。刷新的模式有兩種:ON DEMAND和ON COMMIT。ON DEMAND指物化視圖在用戶需要的時候進行刷新,可以手工通過DBMS_MVIEW.REFRESH等方法來進行刷新,也可以通過JOB定時進行刷新。 ON COMMIT指出物化視圖在對基表的DML操作提交的同時進行刷新。刷新的方法有四種:FAST、COMPLETE、FORCE和NEVER。FAST刷新采用增量刷新,只刷新自上次刷新以后進行的修改。COMPLETE刷新對整個物化視圖進行完全的刷新。如果選擇FORCE方式,則Oracle在刷新時會去判斷是否可以進行快速刷新,如果可以則采用FAST方式,否則采用COMPLETE的方式。NEVER指物化視圖不進行任何刷新。默認(rèn)值是FORCE ON DEMAND。
在建立物化視圖的時候可以指定ORDER BY語句,使生成的數(shù)據(jù)按照一定的順序進行保存。不過這個語句不會寫入物化視圖的定義中,而且對以后的刷新也無效。
物化視圖日志:如果需要進行快速刷新,則需要建立物化視圖日志。物化視圖日志根據(jù)不同物化視圖的快速刷新的需要,可以建立為ROWID或PRIMARY KEY類型的。還可以選擇是否包括SEQUENCE、INCLUDING NEW VALUES以及指定列的列表。
可以指明ON PREBUILD TABLE語句將物化視圖建立在一個已經(jīng)存在的表上。這種情況下,物化視圖和表必須同名。當(dāng)刪除物化視圖時,不會刪除同名的表。這種物化視圖的查詢重寫要求參數(shù)QUERY_REWRITE_INTEGERITY必須設(shè)置為trusted或者stale_tolerated。
物化視圖可以進行分區(qū)。而且基于分區(qū)的物化視圖可以支持分區(qū)變化跟蹤(PCT)。具有這種特性的物化視圖,當(dāng)基表進行了分區(qū)維護操作后,仍然可以進行快速刷新操作。
對于聚集物化視圖,可以在GROUP BY列表中使用CUBE或ROLLUP,來建立不同等級的聚集物化視圖。
簡單試驗
--1.在master site上創(chuàng)建表和mview log
SQL> create table stu (id varchar2(10) primary key ,name varchar2(20));
Table created.
SQL> create materialized view log on stu;
Materialized view log created.
--2.在mv site上創(chuàng)建mview
SQL> create materialized view stu_mv refresh fast start with sysdate next sysdate+1/1440 with primary key as select * fromstu@to_vm9;
Materialized view created.
SQL> select job,log_user,last_date,last_sec,next_date,next_sec,interval,what from user_jobs;
JOB LOG_USER  LAST_DATE   LAST_SEC  NEXT_DATE   NEXT_SEC   INTERVAL       WHAT
--- --------- ----------- --------- ----------- ---------- -------------- -------------------------------------------
21 SEAGULL   2008-2-18 1 14:41:43  2008-2-18 1 14:42:43   sysdate+1/1440 dbms_refresh.refresh('"SEAGULL"."STU_MV"');
SQL>
SQL> select * from tab;
TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
STU_MV                         TABLE
--3.在master site上對master table做更新
SQL> INSERT INTO STU(ID,NAME) VALUES('56','555555555555');
1 row created.
SQL> commit;
--4.等1分鐘后在mv site上檢查
SQL> select * from stu_mv;
ID         NAME
---------- --------------------
56         555555555555
利用prebuilt mv實現(xiàn)跨平臺,跨版本數(shù)據(jù)遷移
該方法的實現(xiàn)原理是對于要遷移的表對象,需要有一個主鍵,用于mv的刷新,對于符合該要求的表,在源表上創(chuàng)建mv日志,再在目標(biāo)數(shù)據(jù)庫上創(chuàng)建結(jié)構(gòu)一樣的表,然后在目標(biāo)表上采用prebuilt方式創(chuàng)建mv,第一次采用完全刷新,之后采用增量刷新,等真正要切換的時候,只需要刷新完增量的日志,刪除mv,保留目標(biāo)表即可。
基本思路的例子:
--1.在源庫上創(chuàng)建表和mview log
SQL> create table big_t1 as select * from dba_objects;
Table created.
SQL> select count(1) from big_t1;
COUNT(1)
----------
6170
SQL> create materialized view log on big_t1;
Materialized view log created.
--2.在目標(biāo)數(shù)據(jù)庫上創(chuàng)建與該表一樣的表,并在該表上創(chuàng)建prebuilt mv
SQL> create table big_t1 as select * frombig_t1@to_vm9 where 1=2;
Table created.
SQL> select count(1) from big_t1;
COUNT(1)
----------
0
SQL> create materialized view big_t1 on prebuilt table refresh fast as select * frombig_t1@to_vm9;
Materialized view created.
--3.做完全刷新和增量刷新
SQL> exec dbms_mview.refresh('BIG_T1','Complete');
PL/SQL procedure successfully completed.
SQL> select count(1) from big_t1;
COUNT(1)
----------
6170
SQL>
--/*此時模擬在做完全刷新過程中,源庫的表又發(fā)生了變化
SQL> insert into big_t1(object_id,owner) values(99991,'test');
1 row created.
SQL> commit;
Commit complete.    */
--再做增量刷新
SQL> select count(1) from big_t1;
COUNT(1)
----------
6170
SQL> exec dbms_mview.refresh('BIG_T1');
PL/SQL procedure successfully completed.
SQL> select count(1) from big_t1;
COUNT(1)
----------
6171
--4.停機切換,做最后一次刷新,然后刪除源庫的mview log和目標(biāo)庫的mview
SQL> exec dbms_mview.refresh('BIG_T1');
PL/SQL procedure successfully completed.
SQL> drop materialized view big_t1;
Materialized view dropped.
SQL> select count(1) from big_t1;
COUNT(1)
----------
6171
這里刪除的mview(big_t1)是prebuilt mv,所以刪除該mview,并不刪除相應(yīng)的表。
如果刪除了mvnew(stu_mv),由于是普通mv,則刪除了該mview,就沒有對應(yīng)的表了。
SQL> drop materialized view stu_mv;
Materialized view dropped.
SQL> select * from tab;
TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
BIG_T1                         TABLE
SQL>
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
物理視圖增量刷新無法清除物化視圖log
Oracle物化視圖日志與快速刷新說明
建立物化視圖所需權(quán)限(二)
物化視圖刪除的順序
使用查詢改寫提高查詢性能
利用觸發(fā)器對物化視圖刷新進行定制
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服