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

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
物化視圖復(fù)制概念和體系結(jié)構(gòu)——高級(jí)復(fù)制

物化視圖復(fù)制概念和體系結(jié)構(gòu)——高級(jí)復(fù)制

 
  最近在重新看Oracle的高級(jí)復(fù)制文檔,正好昨天建立了一個(gè)物化視圖專用的索引貼,事情都趕到一塊了。于是找出了以前針對這篇文檔的翻譯進(jìn)行簡單的修改后作為這篇讀書筆記。
  一、概述
  Oracle提供兩種不同的復(fù)制方法:多主復(fù)制和物化視圖復(fù)制。還可以通過兩種復(fù)制的組合構(gòu)成混合復(fù)制。
  本文主要描述物化視圖復(fù)制,由于物化視圖復(fù)制中的主站點(diǎn)就是多主復(fù)制中的站點(diǎn),因此也會(huì)對相應(yīng)的多主復(fù)制中涉及到的內(nèi)容作相應(yīng)的說明。
  二、物化視圖的概念和體系結(jié)構(gòu)
  Oracle的物化視圖主要用在兩個(gè)方面:高級(jí)復(fù)制和數(shù)據(jù)倉庫。在高級(jí)復(fù)制環(huán)境中,物化視圖用于復(fù)制數(shù)據(jù)到非主體站點(diǎn)。在數(shù)據(jù)倉庫環(huán)境中,物化視圖用于對代價(jià)昂貴的查詢進(jìn)行緩存。
  1.物化視圖是什么
  物化視圖是主體對象在某一時(shí)間點(diǎn)上的復(fù)制品。這個(gè)主體對象即可以是主體站點(diǎn)上的一個(gè)主表,也可以是物化視圖站點(diǎn)上的一個(gè)主物化視圖。在多主復(fù)制中,一個(gè)站點(diǎn)上的表被其他主體站點(diǎn)連續(xù)不斷的更新,而物化視圖則是從一個(gè)主體站點(diǎn)或主物化視圖站點(diǎn)批量的進(jìn)行更新。
  當(dāng)物化視圖進(jìn)行快速刷新時(shí),Oracle會(huì)檢查主表或主物化視圖自上次刷新以來的所有改變,并將其應(yīng)用到物化視圖上。因此,如果主體對象自上次刷新以來存在一些改變,則刷新操作則會(huì)花費(fèi)一定的時(shí)間把這些改變應(yīng)用到物化視圖上。如果自上次刷新以來沒有發(fā)生任何變化,則物化視圖刷新操作會(huì)迅速的完成。
  2.為什么使用物化視圖
  你可以使用物化視圖來完成以下目標(biāo):
  減輕網(wǎng)絡(luò)負(fù)載;
  創(chuàng)建一個(gè)Mass Deployment環(huán)境;
  數(shù)據(jù)子集;
  離線部署。
 ?。?)減輕網(wǎng)絡(luò)負(fù)載:
  你可以通過物化視圖將數(shù)據(jù)分布到許多站點(diǎn),所有用戶不需要再訪問一個(gè)數(shù)據(jù)庫服務(wù)器,負(fù)載被分散到多個(gè)數(shù)據(jù)庫服務(wù)器上。和多主復(fù)制不同的是,你可以根據(jù)需要,只復(fù)制表中的一部分字段或者表中的一部分?jǐn)?shù)據(jù),從而降低了每次復(fù)制的數(shù)據(jù)量。
  多主復(fù)制也可以分布網(wǎng)絡(luò)負(fù)載,但與物化視圖相比它對網(wǎng)絡(luò)的要求要嚴(yán)格得多。由于多主復(fù)制各個(gè)站點(diǎn)間采用的是網(wǎng)狀連接,每個(gè)站點(diǎn)和其他所有的站點(diǎn)都有通信,而且多主復(fù)制一般用于提供實(shí)時(shí)或接近實(shí)時(shí)的復(fù)制,這會(huì)導(dǎo)致很高的網(wǎng)絡(luò)流量,對于網(wǎng)絡(luò)狀況要求比較嚴(yán)格。
  物化視圖采用高效的批量更新方式,從一個(gè)主體站點(diǎn)或一個(gè)主物化視圖站點(diǎn)獲得更新。和多主復(fù)制的連續(xù)通信不一樣,物化視圖復(fù)制只需要周期性的刷新,從而對網(wǎng)絡(luò)的要求大大降低。
  (2)創(chuàng)建Mass Deployment環(huán)境:
  展開模板允許你在本地預(yù)先建立物化視圖環(huán)境。你可以利用展開模板快速簡便的展開物化視圖環(huán)境。你可以不用修改展開模板,而是利用參數(shù)來建立不同用戶的客戶化數(shù)據(jù)集。
 ?。?)數(shù)據(jù)子集:
  物化視圖允許你的復(fù)制建立在列或者行的基礎(chǔ)上,而多主復(fù)制需要復(fù)制整張表。通過使用Data subsetting,對于每個(gè)站點(diǎn)你可以僅復(fù)制滿足本站點(diǎn)需要的數(shù)據(jù)。
 ?。?)離線部署:
  物化視圖不需要專用網(wǎng)絡(luò)連接。你可以利用job的調(diào)度機(jī)制完成物化視圖的定時(shí)自動(dòng)刷新,你也可以在需要的時(shí)候手工刷新物化視圖。而這第二種方法是在筆記本上運(yùn)行應(yīng)用程序的一種理想解決方案。
  3.物化視圖的分類
  物化視圖分為只讀、可更新和可寫三類。不能對只讀物化視圖進(jìn)行DML操作,對于可更新和可寫物化視圖則可以進(jìn)行DML操作。
  注意:對于只讀、可更新和可寫物化視圖,定義物化視圖的查詢語句必須包含主體對象中的所有主鍵列。
 ?。?)只讀物化視圖
  在建立物化視圖時(shí),省略FOR UPDATE語句建立只讀物化視圖。除了不需要屬于一個(gè)物化視圖組之外,只讀物化視圖的許多機(jī)制都和可更新物化視圖相同。
  使用只讀物化視圖可以消除在主體站點(diǎn)或者主物化視圖站點(diǎn)上由物化視圖引入的數(shù)據(jù)沖突,這個(gè)優(yōu)點(diǎn)的代價(jià)是只讀物化視圖不能進(jìn)行dml操作。
  注意:使用只讀物化視圖只能消除由物化視圖站點(diǎn)引入的沖突,并不意味著使用只讀物化視圖就不會(huì)由沖突產(chǎn)生,后面會(huì)舉例詳細(xì)說明。
  (2)可更新物化視圖
  在建立物化視圖時(shí),指明FOR UPDATE語句建立可更新物化視圖。為了可更新物化視圖的修改在刷新時(shí)可以被“推回”主體對象,可更新物化視圖必須屬于一個(gè)物化視圖組。
  由于可更新物化視圖允許數(shù)據(jù)的修改,因此可以降低主體站點(diǎn)的負(fù)載。
  注意:
  1.不要在建立可更新物化視圖時(shí)使用列的別名,否則,在將物化視圖加入到物化視圖組的時(shí)候會(huì)發(fā)生錯(cuò)誤。
  2.主表或主物化視圖列上的默認(rèn)值不會(huì)自動(dòng)應(yīng)用到可更新物化視圖上。
  3.可更新物化視圖不支持DELETE CASCADE操作。
 ?。?)可寫物化視圖
  可寫物化視圖指出FOR UPDATE語句,但是沒有加入到物化視圖組。用戶可以對可寫物化視圖執(zhí)行DML操作,但是在執(zhí)行刷新操作時(shí),修改不會(huì)被“推回”,因此所有的修改在刷新后全部丟失。所有允許只讀物化視圖的情況也同樣允許可寫物化視圖。
  由于可寫物化視圖很少使用,因此以后大部分內(nèi)容都只涉及只讀物化視圖和可更新物化視圖。
  4.物化視圖可用性
  Oracle提供幾種不同類型的物化視圖,以滿足各種復(fù)制環(huán)境的需要。
  介紹下列物化視圖以及它們使用的環(huán)境:
  主鍵物化視圖;
  對象物化視圖;
  ROWID物化視圖;
  復(fù)雜物化視圖。
  當(dāng)建立物化視圖時(shí),不管物化視圖屬于何種類型,總是給出方案名,也就是查詢語句中表的所有者名稱。
 ?。?)主鍵物化視圖
  主鍵物化視圖是默認(rèn)的物化視圖。如果主鍵物化視圖是作為物化視圖組的一部分建立的,且指定了FOR UPDATE語句,那么這個(gè)物化視圖是可更新的,且這個(gè)物化視圖組必須和主站點(diǎn)中復(fù)制組的同名。另外,可更新物化視圖必須和主復(fù)制組在不同的數(shù)據(jù)庫中。
  當(dāng)修改發(fā)生后,修改的數(shù)據(jù)以行級(jí)為單位被傳播,每行數(shù)據(jù)由主鍵確定。
  主鍵物化視圖可以包含一個(gè)子查詢,因此你可以在建立物化視圖時(shí),建立所有數(shù)據(jù)的一個(gè)子集,也就是說,建立物化視圖時(shí)可以只選取你需要的數(shù)據(jù)行。子查詢是嵌入在主查詢中的查詢,因此你可以在建立物化視圖時(shí)有超過一個(gè)的SELECT語句。子查詢可以是簡單的WHERE語句也可以是復(fù)雜的多層WHERE EXISTS語句嵌套。如果主站點(diǎn)中的主對象建立了物化視圖日志表,那么一些包含特定類型子查詢的主鍵物化視圖仍然可以快速(增量)刷新??焖偎⑿吕胢aterialized view logs只更新自上次刷新后被修改的記錄。
 
        (2)對象物化視圖
  如果物化視圖是基于對象表,并且在建立是指定了OF TYPE語句,那么這個(gè)物化視圖叫做對象物化視圖。對象物化視圖的結(jié)構(gòu)和對象表相同——對象物化視圖由行對象組成,每一個(gè)行對象由一個(gè)對象標(biāo)識(shí)列OID標(biāo)識(shí)。
  (3)ROWID物化視圖
  為了后向兼容性,Oracle除了默認(rèn)的主鍵物化視圖外,還支持ROWID物化視圖。ROWID物化視圖基于主對象中行記錄的物理標(biāo)識(shí)ROWID。ROWID物化視圖只被用在基于Oracle7版本的主對象的物化視圖,它不能被用于建立基于Oracle8或更高版本主站點(diǎn)的物化視圖。
 ?。?)復(fù)雜物化視圖
  物化視圖的定義必須滿足某種約束,才能執(zhí)行快速刷新。如果你需要的物化視圖的定義查詢語句更為一般化,不能滿足限制條件,那么這個(gè)物化視圖是復(fù)雜的,并且不能執(zhí)行快速刷新。

#p# #e#

  一般來說,如果一個(gè)物化視圖的定義查詢包含下列語句,則被認(rèn)為是復(fù)雜物化視圖:
  CONNECT BY語句;
  INTERSECT,MINUS或UNION ALL操作;
  在某些情況下的DISTINCT和UNIQUE關(guān)鍵字:包含DISTINCT和UNIQUE關(guān)鍵字的并不都是復(fù)雜物化視圖,簡單物化視圖中也可以包含這兩個(gè)關(guān)鍵字;
  聚集操作;
  連接不在子查詢中的對象;
  某種情況下的UNION操作。
  以及其他任何不滿足特定約束條件的子查詢。具體條件見“物化視圖中的數(shù)據(jù)子集”的物化視圖子查詢約束
  注意:如果可能,盡量避免使用復(fù)雜物化視圖,因?yàn)閺?fù)雜物化視圖不能快速刷新,將會(huì)降低網(wǎng)絡(luò)性能。
  對比簡單物化視圖和復(fù)雜物化視圖:
  為了某種應(yīng)用,你可能需要考慮使用一個(gè)復(fù)雜物化視圖。你有兩種方法可以選擇,它們各有利弊,具體如下:
  復(fù)雜物化視圖:這個(gè)復(fù)雜物化視圖在數(shù)據(jù)庫中展示出高效的查詢性能,因?yàn)檫B接操作在物化視圖刷新時(shí)已經(jīng)完成。然而,由于是復(fù)雜物化視圖,必須執(zhí)行完全刷新,這將極為可能比執(zhí)行快速刷新要慢得多。
  簡單物化視圖通過視圖連接:展示了兩個(gè)簡單物化視圖,它們通過一個(gè)視圖執(zhí)行連接操作。通過視圖查詢不可能有方法A中查詢復(fù)雜物化視圖那樣的性能。然而,簡單物化視圖可以更加有效的使用快速刷新和物化視圖日志。
  總的來說:
  如果你很少刷新,且需要比較高的查詢性能,則使用方法A。
  如果你經(jīng)常刷新,且可以犧牲查詢性能,則使用方法B。
  5.物化視圖操作所需權(quán)限
  三種不同類型的用戶對物化視圖執(zhí)行操作:
  建立者:建立物化視圖的用戶。
  刷新者:刷新物化視圖的用戶。
  所有者:擁有物化視圖的用戶。物化視圖存在于所有者的方案中。
  一個(gè)用戶對物化視圖可以執(zhí)行所有的操作。然而,在一些復(fù)制環(huán)境中,不同的用戶對物化視圖執(zhí)行不同的操作。執(zhí)行這些操作需要的權(quán)限取決于操作由同一個(gè)用戶執(zhí)行還是由不同的用戶執(zhí)行。下面詳細(xì)解釋所需權(quán)限。
  注意:下文沒有包括用重寫查詢選項(xiàng)來創(chuàng)建物化視圖時(shí)所需要的權(quán)限。
 ?。?)創(chuàng)建者是所有者
  如果一個(gè)物化視圖的創(chuàng)建者同時(shí)也是一個(gè)物化視圖的所有者,那么這個(gè)用戶可以通過明確授權(quán)或通過角色擁有下列權(quán)限來創(chuàng)建一個(gè)物化視圖。
  CREATE MATERIALIZED VIEW或者CREATE ANY MATERIALIZED VIEW權(quán)限;
  CREATE TABLE或者CREATE ANY TABLE權(quán)限;
  如果數(shù)據(jù)庫兼容性在8.1.0以下,需要CREATE VIEW或者CREATE ANY VIEW權(quán)限;
  對主站點(diǎn)上對象和物化視圖日志的SELECT權(quán)限或者SELECT ANY TABLE系統(tǒng)權(quán)限。如果主站點(diǎn)不是本地?cái)?shù)據(jù)庫,則SELECT權(quán)限必須授權(quán)給一個(gè)主站點(diǎn)用戶,這個(gè)用戶就是物化視圖站點(diǎn)通過數(shù)據(jù)庫鏈連接到主站點(diǎn)的用戶。
 ?。?)創(chuàng)建者不是所有者
  如果物化視圖的創(chuàng)建者不是所有者,必須授予創(chuàng)建者和所有者某種權(quán)限才能創(chuàng)建物化視圖。創(chuàng)建者的權(quán)限可以直接授權(quán)或通過角色授權(quán),但是所有者的權(quán)限必須通過明確授權(quán)獲得。也就是說,所有者的權(quán)限不能通過角色獲得。
  創(chuàng)建者:
  CREATE ANY MATERIALIZED VIEW系統(tǒng)權(quán)限
  所有者:
  CREATE TABLE或者CREATE ANY TABLE權(quán)限;
  如果數(shù)據(jù)庫兼容性在8.1.0以下,需要CREATE VIEW或者CREATE ANY VIEW權(quán)限;
  對主站點(diǎn)上對象和物化視圖日志的SELECT權(quán)限或者SELECT ANY TABLE系統(tǒng)權(quán)限。如果主站點(diǎn)不是本地?cái)?shù)據(jù)庫,則SELECT權(quán)限必須授權(quán)給一個(gè)主站點(diǎn)用戶,這個(gè)用戶就是物化視圖站點(diǎn)通過數(shù)據(jù)庫鏈連到主站點(diǎn)的用戶。
 ?。?)刷新者是所有者
  如果一個(gè)物化視圖的刷新者同時(shí)也是物化視圖的擁有者,這個(gè)用戶需要主站點(diǎn)上對象和物化視圖日志的SELECT權(quán)限或者SELECT ANY TABLE系統(tǒng)權(quán)限。如果主站點(diǎn)不是本地?cái)?shù)據(jù)庫,則SELECT權(quán)限必須授權(quán)給一個(gè)主站點(diǎn)用戶,這個(gè)用戶就是物化視圖站點(diǎn)通過數(shù)據(jù)庫鏈連到主站點(diǎn)的用戶。權(quán)限可以通過直接授權(quán)或通過角色授權(quán)。
 ?。?)刷新者不是所有者
  如果物化視圖的刷新者不是所有者,必須授予刷新者和所有者某種權(quán)限。這些權(quán)限可以直接授權(quán)或通過角色授權(quán)。
  刷新者:
  ALTER ANY MATERIALIZED VIEW系統(tǒng)權(quán)限。
  所有者:
  主站點(diǎn)上對象和物化視圖日志的SELECT權(quán)限或者SELECT ANY TABLE系統(tǒng)權(quán)限。如果主站點(diǎn)不是本地?cái)?shù)據(jù)庫,則SELECT權(quán)限必須授權(quán)給一個(gè)主站點(diǎn)用戶,這個(gè)用戶就是物化視圖站點(diǎn)通過數(shù)據(jù)庫鏈連到主站點(diǎn)的用戶。
  6.物化視圖中的數(shù)據(jù)子集
  在某些情況下,你可能希望你的物化視圖反映主表或者主物化視圖中數(shù)據(jù)的子集。通過使用WHERE語句,行子集允許你包含主表或者主物化視圖中你想要的行記錄。列子集允許你從主表或者主物化視圖中只包含你所需要的列。在創(chuàng)建物化視圖時(shí),通過在SELECT語句中明確指出所要選取的列來實(shí)現(xiàn)列子集。如果你使用展開模板來創(chuàng)建你的物化視圖,那么你可以在可更新物化視圖上定義列子集。
  (1)使用數(shù)據(jù)子集的一些原因
  降低網(wǎng)絡(luò)流量:在一個(gè)使用列子集的物化視圖中,只有滿足物化視圖定義中WHERE條件語句的修改才會(huì)傳播到物化視圖站點(diǎn),因此減少了事務(wù)傳輸數(shù)量,降低了網(wǎng)絡(luò)流量。
  保護(hù)敏感數(shù)據(jù):用戶只能查看滿足物化視圖查詢定義的數(shù)據(jù)。
  減少資源需要:如果物化視圖建立在筆記本上,則硬盤與服務(wù)器上的硬盤相比要小得多。數(shù)據(jù)子集可以顯著的減少存儲(chǔ)空間。
 
       提高刷新性能:由于較少的數(shù)據(jù)傳播到物化視圖站點(diǎn),刷新執(zhí)行的更加迅速。這一點(diǎn)對于那些需要通過撥號(hào)連接來刷新物化視圖的用戶十分重要。
  (2)帶子查詢的物化視圖
  上面的例子是針對單個(gè)表的。如果創(chuàng)建基于多個(gè)表的物化視圖,則定義和維護(hù)這些物化視圖相對來說困難得多。主要包括多對一子查詢、一對多子查詢、多對多子查詢以及包含UNION操作的子查詢幾種。這些物化視圖比較復(fù)雜,而且在實(shí)際復(fù)制中不經(jīng)常使用,因此這里不再詳細(xì)描述。如果對這部分有興趣,請參閱Oracle9i Advanced Replication 3-18 Materialized Views with Subqueries部分。下面描述一下建立快速刷新子查詢物化視圖的條件。
  物化視圖子查詢約束
  帶子查詢的物化視圖為了能達(dá)到快速刷新的能力,必須滿足許多約束條件,具體如下:
  必須是主鍵物化視圖;
  物化視圖日志必須包括某些在子查詢中出現(xiàn)的列;
  如果子查詢是多對多或一對多查詢,連接列中非主鍵的部分必須包括在物化視圖日志中,多對一子查詢沒有這個(gè)約束;
  子查詢必須是肯定條件,比如,你可以使用EXISTS,但是不能使用NOT EXISTS;
  子查詢必須使用EXISTS連接到嵌套層,不能使用IN;
  每張表只允許一個(gè)EXISTS表達(dá)式;
  連接表達(dá)式必須采用精確匹配或等于連接;
  在子查詢中,每張表只能被連接一次;
  在嵌套層中,每張表必須有主鍵存在;
  嵌套層只能參考比它高的層中的表;
  子查詢可以包含AND操作,但是每個(gè)OR操作只能連接“能確定一條記錄”的列,子查詢中多個(gè)OR運(yùn)算可以通過AND連接;
  子查詢中的所有表必須在同一個(gè)主體站點(diǎn)或主物化視圖站點(diǎn)中。
  7.決定物化視圖的快速刷新能力
  為了檢測所創(chuàng)建的帶子查詢的物化視圖是否滿足上面提到的建立快速刷新物化視圖的種種約束,在創(chuàng)建時(shí),如果違反任何約束條件,則Oracle會(huì)返回錯(cuò)誤提示。如果在建立物化視圖時(shí)指明強(qiáng)制刷新,則不會(huì)收到任何錯(cuò)誤信息。因?yàn)樵趶?qiáng)制刷新時(shí),如果不能執(zhí)行快速刷新的話,Oracle會(huì)自動(dòng)執(zhí)行完全刷新。
  你也可以通過DBMS_MVIEW包中的EXPLAIN_MVIEW過程來檢測已存在的物化視圖甚至是還沒有建立的物化視圖的一些信息,具體信息如下:
  物化視圖的各種能力;
  對于這個(gè)物化視圖來說每種能力是否可能;
  如果不可能,給出導(dǎo)致這種能力不可能的原因;
  這些信息可以存儲(chǔ)在varray中,也可以存儲(chǔ)在MV_CAPABILITIES_TABLE表中。如果你希望把信息存儲(chǔ)到表中,那么你必須在執(zhí)行EXPLAIN_MVIEW存儲(chǔ)過程以前,執(zhí)行ORACLE_HOME/rdbms/admin目錄下的utlxmv.sql腳本。

#p# #e#

  8.多級(jí)物化視圖
  物化視圖的創(chuàng)建可以基于表,也可以基于其他物化視圖,這種物化視圖叫做多級(jí)物化視圖。這種基于其他物化視圖的物化視圖可以是只讀的也可以是可更新的。
  當(dāng)使用多級(jí)物化視圖時(shí),基于主體表的物化視圖叫做第一層物化視圖。基于第一層物化視圖的物化視圖叫做第二層物化視圖。下一層是第三層,依此類推。
  作為其他物化視圖的主對象的物化視圖叫做主物化視圖。處在任何一層的物化視圖都可以成為主物化視圖,而且可以存在多個(gè)其他的物化視圖基于同一個(gè)主物化視圖。
  主物化視圖和主站點(diǎn)中的主表起相同的作用。也就是說把第二層物化視圖上的改變“推到”第一層物化視圖上的操作和把第一次物化視圖上的改變“推到”主表上的操作是完全一樣的。
  在主物化視圖站點(diǎn)必須注冊一個(gè)接收者。在多層物化視圖站點(diǎn)中接收者負(fù)責(zé)接受和應(yīng)用來自主物化視圖站點(diǎn)傳播者的延遲事務(wù)。
  多層物化視圖在設(shè)計(jì)復(fù)制環(huán)境時(shí)提供了很高的靈活性。一些物化視圖站點(diǎn)不需要復(fù)制主表中所有的數(shù)據(jù),實(shí)際上,這些站點(diǎn)可能根本沒有足夠的空間存儲(chǔ)這些數(shù)據(jù)。另外,只復(fù)制較少的數(shù)據(jù)意味著在網(wǎng)絡(luò)上活動(dòng)的數(shù)據(jù)也較少。
  使用多層物化視圖的限制條件:
  主物化視圖和基于主物化視圖的物化視圖都必須滿足下列條件:
  1)必須是主鍵物化視圖;
  2)所在數(shù)據(jù)庫兼容性等于或者高于9.0.1。
  主物化視圖的一些限制。下列類型的物化視圖不能作為可更新物化視圖的主物化視圖。
  1)ROWID物化視圖;
  2)復(fù)雜物化視圖;
  3)只讀物化視圖。
  不過這三種物化視圖可以成為只讀物化視圖的主物化視圖。
  基于物化視圖的可更新物化視圖的額外限制:
  1)所屬的物化視圖組必須和主物化視圖站點(diǎn)上的物化視圖組同名;
  2)必須和主物化視圖不在同一個(gè)數(shù)據(jù)庫上;
  3)必須基于可更新物化視圖,不能基于只讀物化視圖;
  4)主站點(diǎn)上的主物化視圖組必須存在于PUBLIC方案中。
  9.包含用戶定義類型的物化視圖
  Oracle的復(fù)制支持用戶自定義類型數(shù)據(jù)。Oracle不但支持行對象和列對象而且還支持collections的復(fù)制。Collection包括基于用戶自定義類型的數(shù)組和嵌套表。
  使用用戶自定義類型需要注意幾點(diǎn):
  主站點(diǎn)和物化視圖站點(diǎn)的數(shù)據(jù)庫兼容性等于或高于9.0.1;
  如果主對象包含用戶自定義類型,則不能創(chuàng)建refresh-on-commit物化視圖;
  高級(jí)復(fù)制不支持對象的繼承。
  物化視圖復(fù)制中對用戶自定義類型的要求和限制于多主環(huán)境中的限制比較類似,這里不再詳細(xì)描述,如果對這部分內(nèi)容感興趣,請參考Oracle9i Advanced Replication 3-36 Materialized Views with User-Defined Types。
  10.主站點(diǎn)的物化視圖注冊
  在主體站點(diǎn)或主物化視圖站點(diǎn),Oracle數(shù)據(jù)庫會(huì)自動(dòng)注冊基于主體對象的物化視圖的信息。下面介紹物化視圖的注冊機(jī)制
 ?。?)查看關(guān)于注冊物化視圖的信息
  第一層物化視圖或物化視圖組注冊在主體站點(diǎn)。第二層以上的物化視圖或物化視圖組注冊在主物化視圖站點(diǎn)??梢圆樵冎髡军c(diǎn)或主物化視圖站點(diǎn)上的DBA_REGISTERED_MVIEWS視圖,列出遠(yuǎn)端物化視圖的下列信息:
  1)物化視圖的所有者,名稱,以及包含物化視圖的數(shù)據(jù)庫名;
  2)物化視圖的定義查詢語句;
  3)其他物化視圖屬性,比如刷新方法等。
  也可以查詢主體站點(diǎn)或主物化視圖站點(diǎn)上的DBA_MVIEW_REFRESH_TIMES視圖,取得每個(gè)物化視圖的最后刷新時(shí)間。數(shù)據(jù)庫管理員可以查詢這些信息來監(jiān)視遠(yuǎn)端物化視圖的活動(dòng)。
       (2)內(nèi)部機(jī)制
  當(dāng)你創(chuàng)建物化視圖時(shí),Oracle會(huì)自動(dòng)在主體站點(diǎn)或主物化視圖站點(diǎn)上注冊物化視圖,在你刪除物化視圖時(shí),Oracle會(huì)自動(dòng)取消物化視圖的注冊。物化視圖組和物化視圖一樣。
  當(dāng)你刪除一個(gè)主物化視圖時(shí),Oracle不會(huì)自動(dòng)刪除那些基于它的物化視圖,你必須手工刪除這些物化視圖。如果你沒有刪除這個(gè)物化視圖,且這個(gè)物化視圖嘗試刷新以及別刪除的主物化視圖,則Oracle會(huì)返回錯(cuò)誤信息。
  例如:假設(shè)物化視圖orders_lev1基于主表oe.orders,物化視圖orders_lev2基于物化視圖orders_lev1。如果你刪除了orders_lev1,orders_lev2不會(huì)被自動(dòng)刪除。這時(shí),如果你嘗試去刷新orders_lev2,則Oracle返回錯(cuò)誤消息,因?yàn)閛rders_lev1已經(jīng)不存在了。
  注意:Oracle無法保證在主站點(diǎn)上的注冊或取消注冊物化視圖操作和建立或刪除物化視圖操作完全一一對應(yīng)。如果Oracle在創(chuàng)建物化視圖時(shí),無法成功的注冊,則你必須利用DBMS_MVIEW包的REGISTER_MVIEW過程手工完成注冊。如果在刪除物化視圖時(shí),Oracle無法成功的取消注冊,則注冊信息會(huì)一直保存在主體站點(diǎn)或主物化視圖站點(diǎn),直到你手工取消注冊。復(fù)雜物化視圖有可能無法注冊。
  注意:Oracle7版本的主站點(diǎn)不能注冊物化視圖。
  (3)手工物化視圖注冊
  如果有必要,你可以手工注冊物化視圖。使用DBMS_MVIEW包中的REGISTER_MVIEW和UNREGISTER_MVIEW過程完成主站點(diǎn)上的增加、修改和刪除物化視圖注冊信息。
  11.主站點(diǎn)和主物化視圖站點(diǎn)機(jī)制
  下圖中包含了物化視圖復(fù)制環(huán)境中涉及到的對象,有些對象是可選的。例如:如果你建立一個(gè)只讀物化視圖,那么在物化視圖站點(diǎn)既不需要可更新物化視圖日志也不需要內(nèi)部觸發(fā)器;如果你建立一個(gè)無法快速刷新的復(fù)雜物化視圖,那么在主站點(diǎn)物化視圖日志。
  注意:主物化視圖可能同時(shí)存在物化視圖日志和可更新物化視圖日志。在設(shè)計(jì)主物化視圖站點(diǎn)時(shí),應(yīng)當(dāng)保證有足夠的空間存放這些日志。
  為了支持快速刷新物化視圖,下列機(jī)制是主體站點(diǎn)或主物化視圖站點(diǎn)所需要的。
  (1)主表或主物化視圖
  主表或主物化視圖是物化視圖的基礎(chǔ)。如果主體對象是主表的話,這張表可能同時(shí)成為多主復(fù)制和物化視圖復(fù)制中的對象。物化視圖只能指向一個(gè)主體站點(diǎn)或主物化視圖指點(diǎn)。
  主表或主物化視圖上的改變被記錄在物化視圖日志中,并在刷新過程中,傳播并應(yīng)用到物化視圖上。
  注意:快速刷新物化視圖可以基于主表或主物化視圖建立。但是基于同義詞或者視圖的物化視圖只能執(zhí)行完全刷新。
  (2)內(nèi)部觸發(fā)器
  當(dāng)對主表或主物化視圖進(jìn)行DML操作時(shí),內(nèi)部觸發(fā)器將受到影響的行記錄在物化視圖日志中。記錄的信息包括主鍵、ROWID或?qū)ο髽?biāo)識(shí)以及其他列的值。當(dāng)你為主表或主物化視圖建立物化視圖日志時(shí),會(huì)自動(dòng)建立并激活一個(gè)內(nèi)部的AFTER ROW觸發(fā)器。只要插入、更新或刪除語句修改表中的數(shù)據(jù),則觸發(fā)器會(huì)在物化視圖日志中插入記錄。這個(gè)觸發(fā)器總是最后被點(diǎn)火的觸發(fā)器。
 ?。?)物化視圖日志
  如果你想要采用快速刷新的話,必須建立基于主體對象的物化視圖日志。物化視圖可以記錄主體對象被更新記錄的主鍵、ROWID或?qū)ο髽?biāo)識(shí)或者二者全部。物化視圖日志也可以包含其他列用以支持帶子查詢的物化視圖的快速刷新。
  物化視圖日志表的名稱為MLOG$_后面跟主體對象的名稱。物化視圖日志和主體對象建立在相同的用戶模式下。一個(gè)物化視圖日志可以支持多個(gè)基于主體對象的物化視圖。
  有下列幾種物化視圖日志:
  主鍵:物化視圖日志在記錄主體對象發(fā)生變化的記錄時(shí),是根據(jù)主鍵定位的。
  ROWID:物化視圖日志在記錄主體對象發(fā)生變化的記錄時(shí),是根據(jù)ROWID定位的。
  對象標(biāo)識(shí):物化視圖日志在記錄主體對象發(fā)生變化的記錄時(shí),是根據(jù)對象標(biāo)識(shí)定位的。
  組合類型:物化視圖日志在記錄主體對象發(fā)生變化的記錄時(shí),是根據(jù)上面三種類型的組合來定位的。如果物化視圖日志根據(jù)主鍵、ROWID和對象標(biāo)識(shí)定位變化的數(shù)據(jù),則這種物化視圖日志同時(shí)支持主鍵、ROWID和對象物化視圖,這種物化視圖日志對于一個(gè)包含三種類型物化視圖的環(huán)境是很有用的。
  組合類型物化視圖日志和其他類型物化視圖日志工作方式相同,只不過多記錄了一、二種類型。
  雖然主鍵物化視圖日志和ROWID物化視圖日志的差別很小,但是這些差別在實(shí)際使用中有著很大的影響。如果ROWID物化視圖日志會(huì)導(dǎo)致重組和截?cái)嗍掷щy,因?yàn)檫@回導(dǎo)致ROWID發(fā)生變化。如果你對主表進(jìn)行了重組和截?cái)?,那么ROWID物化視圖必須執(zhí)行完全刷新。
  1)基于對象表的物化視圖日志
  你可以在對象表上建立物化視圖日志。
  當(dāng)你創(chuàng)建基于這個(gè)類型的對象表時(shí),你可以指出對象標(biāo)識(shí)是系統(tǒng)產(chǎn)生的或者基于主鍵的。
  當(dāng)你為對象表創(chuàng)建物化視圖日志時(shí),你必須指明WITH OBJECT ID語句記錄對象標(biāo)識(shí)。如果對象標(biāo)識(shí)是基于主鍵的,你也可以指明記錄主鍵。
  2)導(dǎo)入物化視圖和物化視圖日志到其他用戶模式下的約束
  導(dǎo)出的物化視圖和物化視圖日志DDL語句中明確給出了方案名稱。因此物化視圖和物化視圖日志不能導(dǎo)入到其他用戶方案中。如果你嘗試使用FROM USER和TO USER選項(xiàng)導(dǎo)入物化視圖或物化視圖日志,則導(dǎo)入過程中會(huì)收到錯(cuò)誤。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Oracle實(shí)踐總結(jié)
CSDN技術(shù)中心 ORACLE中的物化視圖
58 (轉(zhuǎn))dblink+物化視圖同步兩個(gè)數(shù)據(jù)庫的表數(shù)據(jù)
物化視圖相關(guān)操作
Oracle分布式系統(tǒng)數(shù)據(jù)復(fù)制技術(shù)
Oracle數(shù)據(jù)庫常用十一大操作指令
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服