共計 2194 個字符,預計需要花費 6 分鐘才能閱讀完成。
這篇文章給大家介紹 Oracle12c 中 CDB 數據庫中數據字典架構是怎樣的,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
數據字典就是元數據的集合,比如創建的表,列,約束,觸發器等等這些都是元數據,需要保存到數據庫中。除此之外,Oracle 自身的一些數據庫對象,如目錄,PL/SQL 代碼等等這些都是元數據,都需要存放在數據字典中。隨著 12c 容器數據的普及,Oracle 數據字典發生了哪些變化呢,下文即是具體描述。
一、數據字典及其形成
1、數據字典
數據字典是元數據的集合,從邏輯上和物理上描述了數據庫及內容,存儲于 SYSTEM 與 SYSAUX 表空間內的若干段。
SYS 用戶擁有所有的數據字典表,數據字典基本一般以
2、數據字典的形成
在數據庫創建階段創建,在使用階段維護和更新
無法通過 DML 操作來修改,只能通過相關的命令修改系統,來達到間接修改數據字典。
3、數據字典包括的內容
數據庫對象的定義信息
用戶定義信息
PL/SQL 代碼
用戶創建的其他對象等
關于數據字典詳細介紹可以參考:Oracle 數據字典和數據字典視圖
二、CDB 數據庫中數據字典架構
1、數據字典存放方式的變更
在 Oracle 12c 之前的數據庫版本,系統數據字典和用戶數據字典采取了混合存放的處理方式。
在 Oracle 12c CDB 數據庫中采取分離存放的方式,及各個 PDB 數據字典獨立存放。
從用戶和應用程序的角度來看,CDB 中每個容器中的數據字典是分開的,因為它將在非 CDB 中。
2、非 CDB 混用數據字典情形示意圖
在新創建的不包含用戶數據的非 CDB 中,數據字典僅包含系統元數據。
例如,TAB$ 表包含僅描述 Oracle 提供的表的行,例如 TRIGGER$ 和 SERVICE$。
隨著用戶數據庫對象添加到數據庫,則用戶添加的這些對象信息被混合存放到了系統數據字典(即 Oracle 提供的數據對象字典)
如下圖描繪了二個基礎數據字典表
左邊圖示中黑色條表示描述系統數據字典的行,綠色條的表示用戶對象產生的行相間到數據字典表
3、CDB 分離數據字典情形示意圖
在 CDB 中,數據字典元數據在根和 PDB 之間分割。
在下圖中,表 emp 和 dept 位于 PDB 中。該用戶數據的數據字典也駐留在 PDB 中。因此,TAB$PDB 中的表具有 emp 表的行和表 dept 的行。
那對于 Oracle 提供的系統對象 (系統級別數據字典) 要如何訪問呢,Oracle 通過內部指針的方式來實現。
如下圖顯示 PDB 中的數據字典包含指向根中數據字典的指針。在內部,Oracle 提供的對象(如數據字典表定義和 PL / SQL 包)僅在根中表示。
這種架構實現了 CDB 內的兩個主要目標:
???? 減少重復
???????? 例如,DBMS_ADVISORCDB 不是將 PL / SQL 包的源代碼存儲在每個 PDB 中,而是將其存儲在 CDB$ROOT 其中,從而節省了磁盤空間。
???? 易于數據庫升級
???????? 如果數據字典表的定義存在于每個 PDB 中,并且如果定義在新版本中更改,則每個 PDB 將需要單獨升級以捕獲更改。在根中存儲表定義只有一次消除了這個問題。
4、元數據和數據鏈接
CDB 使用內部鏈接機制來分離數據字典信息。
具體來說,Oracle 數據庫使用以下自動管理的指針:
元數據鏈接
??Oracle 數據庫僅在 CDB 根目錄中存儲有關字典對象的元數據。例如,數據字典視圖下的 OBJ$ 字典表的列定義 DBA_OBJECTS 僅存在于根目錄中。如前一圖示,OBJ$ 在每個 PDB 表使用稱為內部機構的元數據鏈接指向存儲在根定義的 OBJ$。
?? 該數據對應于元數據鏈路駐留在其 PDB,而不是在根。例如,如果您在 hrpdb 上的表 mytable 中添加行,然后將行存儲在 PDB 數據文件。PDB 和根中的數據字典視圖包含不同的行。描述表 mytable 的一個新行被添加到 hrpdb 的 OBJ$,但是不存在于 CDB 根目錄中的 OBJ$。因此,查詢 DBA_OBJECTS 在 CDB 根和 DBA_OBJECTS 在 hrdpb 顯示出不同的結果。
數據鏈接
?? 注意:
??Oracle 數據庫 12 c 版本 1(12.1.0.2)中的數據鏈接稱為對象鏈接。
?? 在某些情況下,Oracle 數據庫將一個對象的數據(不僅僅是元數據)存儲在應用程序根目錄中。應用程序 PDB 使用稱為數據鏈接的內部機制來引用應用程序根目錄中的對象。創建數據鏈接的應用程序 PDB 還存儲數據鏈接描述。數據鏈接繼承其所涉及的對象的數據類型。
擴展數據鏈接
?? 擴展數據鏈路是數據鏈路和元數據鏈路的混合。像數據鏈接一樣,擴展數據鏈接引用應用程序根目錄中的對象。然而,擴展數據鏈路也引用 PDB 中的相應對象。像元數據鏈接一樣,應用程序 PDB 中的對象從應用程序根目錄中的相應對象繼承元數據。
?? 在應用程序根目錄中查詢時,擴展的數據鏈接對象僅從應用程序根目錄中獲取行。然而,當在應用程序 PDB 中查詢時,擴展的數據鏈接對象從應用程序根和應用程序 PDB 中獲取行。
Oracle 數據庫自動創建和管理元數據和數據鏈接 CDB$ROOT。用戶無法添加,修改或刪除這些鏈接。
三、數據字典視圖
在啟用 CDB 之后,數據字典相關視圖也有一些變化,主要是增加了 CDB 相關的視圖。如下圖所示:
關于 Oracle12c 中 CDB 數據庫中數據字典架構是怎樣的就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。