天天看點

Oracle12c之 CDB資料庫中資料字典架構 一、資料字典及其形成 二、CDB資料庫中資料字典架構 三、示範非CDB及CDB資料字典 四、資料字典視圖轉:http://blog.csdn.net/leshami/article/details/72833564

資料字典就是中繼資料的集合,比如建立的表,列,限制,觸發器等等這些都是中繼資料,需要儲存到資料庫中。除此之外,Oracle自身的一些資料庫對象,如目錄,PL/SQL代碼等等這些都是中繼資料,都需要存放在資料字典中。随着12c 容器資料的普及,Oracle資料字典發生了哪些變化呢,下文即是具體描述。

資料字典是中繼資料的集合,從邏輯上和實體上描述了資料庫及内容,存儲于SYSTEM與SYSAUX表空間内的若幹段。

SYS使用者擁有所有的資料字典表,資料字典基本一般以結尾,如col,tab$等,這些資料字典存放在system表空間中。

在資料庫建立階段建立,在使用階段維護和更新

無法通過DML操作來修改,隻能通過相關的指令修改系統,來達到間接修改資料字典。

資料庫對象的定義資訊

使用者定義資訊

PL/SQL代碼

使用者建立的其他對象等

在Oracle 12c之前的資料庫版本,系統資料字典和使用者資料字典采取了混合存放的處理方式。

在Oracle 12c CDB資料庫中采取分離存放的方式,及各個PDB資料字典獨立存放。

從使用者和應用程式的角度來看,CDB中每個容器中的資料字典是分開的,因為它将在非CDB中。

在新建立的不包含使用者資料的非CDB中,資料字典僅包含系統中繼資料。

例如,TAB$表包含僅描述Oracle提供的表的行,例如TRIGGER$和SERVICE$。

随着使用者資料庫對象添加到資料庫,則使用者添加的這些對象資訊被混合存放到了系統資料字典(即Oracle提供的資料對象字典)

如下圖描繪了二個基礎資料字典表

左邊圖示中黑色條表示描述系統資料字典的行,綠色條的表示使用者對象産生的行相間到資料字典表 

Oracle12c之 CDB資料庫中資料字典架構 一、資料字典及其形成 二、CDB資料庫中資料字典架構 三、示範非CDB及CDB資料字典 四、資料字典視圖轉:http://blog.csdn.net/leshami/article/details/72833564

在CDB中,資料字典中繼資料在根和PDB之間分割。

在下圖中,表emp和dept位于PDB中。該使用者資料的資料字典也駐留在PDB中。是以,TAB$PDB中的表具有emp表的行和表dept的行。

Oracle12c之 CDB資料庫中資料字典架構 一、資料字典及其形成 二、CDB資料庫中資料字典架構 三、示範非CDB及CDB資料字典 四、資料字典視圖轉:http://blog.csdn.net/leshami/article/details/72833564

那對于Oracle提供的系統對象(系統級别資料字典)要如何通路呢,Oracle通過内部指針的方式來實作。

如下圖顯示PDB中的資料字典包含指向根中資料字典的指針。在内部,Oracle提供的對象(如資料字典表定義和PL / SQL包)僅在根中表示。

Oracle12c之 CDB資料庫中資料字典架構 一、資料字典及其形成 二、CDB資料庫中資料字典架構 三、示範非CDB及CDB資料字典 四、資料字典視圖轉:http://blog.csdn.net/leshami/article/details/72833564

這種架構實作了CDB内的兩個主要目标:

    減少重複

        例如,DBMS_ADVISORCDB不是将PL / SQL包的源代碼存儲在每個PDB中,而是将其存儲在CDB$ROOT其中,進而節省了磁盤空間。

    易于資料庫更新

        如果資料字典表的定義存在于每個PDB中,并且如果定義在新版本中更改,則每個PDB将需要單獨更新以捕獲更改。在根中存儲表定義隻有一次消除了這個問題。

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資料庫中資料字典架構 一、資料字典及其形成 二、CDB資料庫中資料字典架構 三、示範非CDB及CDB資料字典 四、資料字典視圖轉:http://blog.csdn.net/leshami/article/details/72833564

本文轉自 張沖andy 部落格園部落格,原文連結:  http://www.cnblogs.com/andy6/p/7527786.html ,如需轉載請自行聯系原作者