Oracle:容器資料庫簡介

Ryan_Bai發表於2021-07-12

Oracle 12C 引入了 CDB 與 PDB 的新特性,在 ORACLE 12C 資料庫引入的多租使用者環境(Multitenant Environment)中,允許一個資料庫容器(CDB)承載多個可插拔資料庫(PDB)。CDB 全稱為 Container Database,中文翻譯為資料庫容器,PDB 全稱為 Pluggable Database,即可插拔資料庫。在 ORACLE 12C 之前,例項與資料庫是一對一或多對一關係(RAC):即一個例項只能與一個資料庫相關聯,資料庫可以被多個例項所載入。而例項與資料庫不可能是一對多的關係。當進入 ORACLE 12C 後,例項與資料庫可以是一對多的關係。下面是官方文件關於CDB與PDB的關係圖。 

CDB 元件(Components of a CDB) 

一個 CDB 資料庫容器包含了下面一些元件:

  • ROOT 元件
    ROOT 又叫 CDB$ROOT,儲存著 ORACLE 提供的後設資料和 Common User,後設資料的一個例子是 ORACLE 提供的 PL/SQL 包的原始碼,Common User 是指在每個容器中都存在的使用者。

  • SEED 元件
    SEED 又叫 PDB$SEED,這個是你建立 PDBS 資料庫的模板,你不能在 SEED 中新增或修改一個物件。一個 CDB 中有且只能有一個 SEED。

  • PDBS
    CDB 中可以有一個或多個 PDBS,PDBS 向後相容,可以像以前在資料庫中那樣操作 PDBS,這裡指大多數常規操作。

這些元件中的每一個都可以被稱為一個容器。因此,ROOT(根)是一個容器,Seed(種子)是一個容器,每個 PDB 是一個容器。每個容器在 CDB 中都有一個獨一無二的的 ID和名稱。

注意:

  1. 一個 CDB 可以包含 253 個 PDB(去掉一個是 seed 還能建立 252 個 PDB)。

  2. 檔案

    1. 資料檔案:ROOT,SEED 以及每一個 PDB 的資料檔案是獨立的。

    2. REDO:一個單例項的 CDB 有一個 redo log;RAC 環境中每個例項有一個 redo log。

    3. control file: 一個 CDB 也僅有一個控制檔案(可以多路複用)。

    4. 引數檔案:一個 CDB 使用一個 SPFILE 或者一個 PFILE,其中為 ROOT 設定的引數的值可以被 PDB 繼承。另外,也可以使用 ALTER SYSTEM 語句來設定 PDB 的引數。對引數檔案執行操作時,必須使用 common user 並且使用 AS SYSDBA、ASSYSOPER、AS SYSBACKUP來連線資料庫。要建立 CDB,必須要將初始化引數 ENABLE_PLUGGABLE_DATABASE 的值設定為 TRUE。

  3. 程式:只有一組後臺程式,它們被 ROOT 和所有 PDB 共享。

  4. 資料庫設定

    1. 字符集:所有 PDB 的字符集都使用 CDB 的字符集。

    2. 時區:可以設定所有 PDB 的時區與 CDB 相同,也可以單獨為 PDB 設定時區。

    3. db_size:塊大小被應用於整個 CDB。

    4. db_name:ROOT 的全域性資料庫名就是 CDB 的全域性資料庫名;PDB 的全域性資料庫名是由 PDB name 和 DB_DOMAIN 引數共同定義的。

  5. 表空間:

    1. ROOT 與每一個 PDB 都有自己的 SYSAUX 表空間和 SYSTEM 表空間。可以為 ROOT 和每一個 PDB 設定預設表空間。而預設的臨時表空間對於整個 CDB 只有一個,但是可以為每個 PDB 建立臨時表空間。

    2. UNDO 表空間對於 CDB 是唯一的。在 CDB 中,初始化引數UNDO_MANAGEMENT 必須被設定為 AUTO。當前容器為 PDB 時,無法通過資料字典檢視檢視 UNDO 表空間,只能通過動態效能檢視。 

PDB 簡介

PDB新特點的優勢

  • 可以把多個 PDB 整合進一個平臺。

  • 可以快速提供一個新的 PDB 或一個已有 PDB 的克隆。

  • 通過拔插技術,可以快速把存在的資料庫重新部署到一個新平臺上。

  • 多個 PDB 資料庫補丁或升級一次完成。

  • 通過把單個 PDB 拔插到較高版本的不同 CDB,可以補丁或升級一個PDB。

  • 從同一個 CDB 中眾多 PDB 中分離出某個 PDB 的內容。

  • 分離這些 PDB 應用管理員的責任。 

PDB新特點的功能

  • 在一個 CDB 中,你可以擁有很多 PDB。

  • PDB 和 12.1 之前版本的普通資料庫是向後相容的。

  • PDB 對應用是透明的——你不需要改變客戶端程式碼或資料庫物件。

  • RAC 中每個例項作為一個整體開啟 CDB(因此 CDB 和其中的 PDB 資料庫版本都是相同的)。

  • 會話僅僅看到它自己連線的那個 PDB。

  • 你可以從一個 CDB 拔出一個 PDB,然後插入另一個 CDB。

  • 你可以在同一個 CDB 或不同 CDB 間克隆 PDB。

  • 資源管理器隨著 PDB 的功能得以擴充套件。

  • 通過 SQL 語句實現了實體 PDB 的操作(建立,拔出,插入,克隆,清除,設定開啟模式)。

  • 當連線到所謂的“根”(ROOT)時,CDB 管理員來執行這些操作。

  • 所有的 PDB 能被一次備份,但可以分別單獨恢復。

PDB的詳解

  • 每個 PDB 有自己的私有資料字典用於使用者建立的資料庫物件;另一方面,CDB 作為一個整體也包含 Oracle 提供系統的資料字典,其中,每個資料字典定義自己的名稱空間。換句話說,有全域性資料字典(CDB級)和本地資料字典(PDB級)。

  • 有新的分開的資料字典架構,該架構允許一個 PDB 被快速從一個 CDB 拔出並插入一個不同的 CDB。

  • 每個 PDB 只能看到 Oracle 提供系統的只讀定義。

  • 有全域性資料庫引數,也有本地資料庫引數。PDB 引數僅僅屬於特定的 PDB,並且拔出後,PDB 引數也將保持不變。

  • 資料庫使用者可以是全域性的(CDB)或本地的(PDB)。SYS 和 SYSTEM 使用者一開始就在兩級 DB 中存在。如果你在 CDB 中建立了一個新使用者,那麼你在 PDB 中也能看到這個使用者。在 PDB 中建立的使用者只能在該 PDB 中使用。

  • 臨時表空間可以是全域性或本地的。

  • Redo 日誌和 Undo 表空間都是全域性的(CDB級)。

  • Data Guard 在 CDB 級作為一個整體發揮作用;RMAN 排程的備份也作為一個整體在 CDB 級完成;任何時候,你可以只備份一個 PDB。

  • 應用連線 PDB 時,不需做程式碼修改;系統管理員可以連線 CDB;連線串中的服務名確定目標 PDB。

  • PDB 允許更加清晰的宣告定義一個應用;一個 PDB 對同一個 CDB 裡的其他 PDB一無所知;每個 PDB 是個密閉的容器。這保證了新層面 DB 的獨立和安全。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31490526/viewspace-2780850/,如需轉載,請註明出處,否則將追究法律責任。

相關文章