您好,登錄后才能下訂單哦!
這篇文章給大家介紹Oracle12c中CDB數(shù)據(jù)庫中數(shù)據(jù)字典架構(gòu)是怎樣的,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
數(shù)據(jù)字典就是元數(shù)據(jù)的集合,比如創(chuàng)建的表,列,約束,觸發(fā)器等等這些都是元數(shù)據(jù),需要保存到數(shù)據(jù)庫中。除此之外,Oracle自身的一些數(shù)據(jù)庫對象,如目錄,PL/SQL代碼等等這些都是元數(shù)據(jù),都需要存放在數(shù)據(jù)字典中。隨著12c 容器數(shù)據(jù)的普及,Oracle數(shù)據(jù)字典發(fā)生了哪些變化呢,下文即是具體描述。
數(shù)據(jù)字典是元數(shù)據(jù)的集合,從邏輯上和物理上描述了數(shù)據(jù)庫及內(nèi)容,存儲于SYSTEM與SYSAUX表空間內(nèi)的若干段。
SYS用戶擁有所有的數(shù)據(jù)字典表,數(shù)據(jù)字典基本一般以 2、數(shù)據(jù)字典的形成
在數(shù)據(jù)庫創(chuàng)建階段創(chuàng)建,在使用階段維護(hù)和更新
無法通過DML操作來修改,只能通過相關(guān)的命令修改系統(tǒng),來達(dá)到間接修改數(shù)據(jù)字典。
數(shù)據(jù)庫對象的定義信息
用戶定義信息
PL/SQL代碼
用戶創(chuàng)建的其他對象等
關(guān)于數(shù)據(jù)字典詳細(xì)介紹可以參考:Oracle 數(shù)據(jù)字典和數(shù)據(jù)字典視圖
在Oracle 12c之前的數(shù)據(jù)庫版本,系統(tǒng)數(shù)據(jù)字典和用戶數(shù)據(jù)字典采取了混合存放的處理方式。
在Oracle 12c CDB數(shù)據(jù)庫中采取分離存放的方式,及各個PDB數(shù)據(jù)字典獨立存放。
從用戶和應(yīng)用程序的角度來看,CDB中每個容器中的數(shù)據(jù)字典是分開的,因為它將在非CDB中。
在新創(chuàng)建的不包含用戶數(shù)據(jù)的非CDB中,數(shù)據(jù)字典僅包含系統(tǒng)元數(shù)據(jù)。
例如,TAB$表包含僅描述Oracle提供的表的行,例如TRIGGER$和SERVICE$。
隨著用戶數(shù)據(jù)庫對象添加到數(shù)據(jù)庫,則用戶添加的這些對象信息被混合存放到了系統(tǒng)數(shù)據(jù)字典(即Oracle提供的數(shù)據(jù)對象字典)
如下圖描繪了二個基礎(chǔ)數(shù)據(jù)字典表
左邊圖示中黑色條表示描述系統(tǒng)數(shù)據(jù)字典的行,綠色條的表示用戶對象產(chǎn)生的行相間到數(shù)據(jù)字典表
在CDB中,數(shù)據(jù)字典元數(shù)據(jù)在根和PDB之間分割。
在下圖中,表emp和dept位于PDB中。該用戶數(shù)據(jù)的數(shù)據(jù)字典也駐留在PDB中。因此,TAB$PDB中的表具有emp表的行和表dept的行。
那對于Oracle提供的系統(tǒng)對象(系統(tǒng)級別數(shù)據(jù)字典)要如何訪問呢,Oracle通過內(nèi)部指針的方式來實現(xiàn)。
如下圖顯示PDB中的數(shù)據(jù)字典包含指向根中數(shù)據(jù)字典的指針。在內(nèi)部,Oracle提供的對象(如數(shù)據(jù)字典表定義和PL / SQL包)僅在根中表示。
這種架構(gòu)實現(xiàn)了CDB內(nèi)的兩個主要目標(biāo):
????減少重復(fù)
????????例如,DBMS_ADVISORCDB不是將PL / SQL包的源代碼存儲在每個PDB中,而是將其存儲在CDB$ROOT其中,從而節(jié)省了磁盤空間。
????易于數(shù)據(jù)庫升級
????????如果數(shù)據(jù)字典表的定義存在于每個PDB中,并且如果定義在新版本中更改,則每個PDB將需要單獨升級以捕獲更改。在根中存儲表定義只有一次消除了這個問題。
CDB使用內(nèi)部鏈接機(jī)制來分離數(shù)據(jù)字典信息。
具體來說,Oracle數(shù)據(jù)庫使用以下自動管理的指針:
元數(shù)據(jù)鏈接
??Oracle數(shù)據(jù)庫僅在CDB根目錄中存儲有關(guān)字典對象的元數(shù)據(jù)。例如,數(shù)據(jù)字典視圖下的OBJ$字典表的列定義DBA_OBJECTS僅存在于根目錄中。如前一圖示,OBJ$在每個PDB表使用稱為內(nèi)部機(jī)構(gòu)的元數(shù)據(jù)鏈接指向存儲在根定義的OBJ$。
??該數(shù)據(jù)對應(yīng)于元數(shù)據(jù)鏈路駐留在其PDB,而不是在根。例如,如果您在hrpdb上的表mytable中添加行,然后將行存儲在PDB數(shù)據(jù)文件。PDB和根中的數(shù)據(jù)字典視圖包含不同的行。描述表mytable的一個新行被添加到hrpdb的OBJ$,但是不存在于CDB根目錄中的OBJ$。因此,查詢DBA_OBJECTS在CDB根和DBA_OBJECTS在hrdpb顯示出不同的結(jié)果。
數(shù)據(jù)鏈接
??注意:
??Oracle數(shù)據(jù)庫12 c版本1(12.1.0.2)中的數(shù)據(jù)鏈接稱為對象鏈接。
??在某些情況下,Oracle數(shù)據(jù)庫將一個對象的數(shù)據(jù)(不僅僅是元數(shù)據(jù))存儲在應(yīng)用程序根目錄中。應(yīng)用程序PDB使用稱為數(shù)據(jù)鏈接的內(nèi)部機(jī)制來引用應(yīng)用程序根目錄中的對象。創(chuàng)建數(shù)據(jù)鏈接的應(yīng)用程序PDB還存儲數(shù)據(jù)鏈接描述。數(shù)據(jù)鏈接繼承其所涉及的對象的數(shù)據(jù)類型。
擴(kuò)展數(shù)據(jù)鏈接
??擴(kuò)展數(shù)據(jù)鏈路是數(shù)據(jù)鏈路和元數(shù)據(jù)鏈路的混合。像數(shù)據(jù)鏈接一樣,擴(kuò)展數(shù)據(jù)鏈接引用應(yīng)用程序根目錄中的對象。然而,擴(kuò)展數(shù)據(jù)鏈路也引用PDB中的相應(yīng)對象。像元數(shù)據(jù)鏈接一樣,應(yīng)用程序PDB中的對象從應(yīng)用程序根目錄中的相應(yīng)對象繼承元數(shù)據(jù)。
??在應(yīng)用程序根目錄中查詢時,擴(kuò)展的數(shù)據(jù)鏈接對象僅從應(yīng)用程序根目錄中獲取行。然而,當(dāng)在應(yīng)用程序PDB中查詢時,擴(kuò)展的數(shù)據(jù)鏈接對象從應(yīng)用程序根和應(yīng)用程序PDB中獲取行。
Oracle數(shù)據(jù)庫自動創(chuàng)建和管理元數(shù)據(jù)和數(shù)據(jù)鏈接CDB$ROOT。用戶無法添加,修改或刪除這些鏈接。
在啟用CDB之后,數(shù)據(jù)字典相關(guān)視圖也有一些變化,主要是增加了CDB相關(guān)的視圖。如下圖所示:
關(guān)于Oracle12c中CDB數(shù)據(jù)庫中數(shù)據(jù)字典架構(gòu)是怎樣的就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。