Oracle Database 12c中帶來一種全新的架構,容許用戶在一個獨立的Oracle數據庫中擁有多個pluggable可拔插的數據庫。這種Pluggable 可拔插數據庫的出現是爲了對應 用戶目前使用RDBMS數據庫的現狀,即有一些用戶擁有大量的部門級應用構建於Oracle RDBMS數據庫之上。
如下幾個場景適合於使用pluggable database:
- 在產品系統中的某些應用實際僅使用十分少許的硬件資源。可是若是存在大量這樣的應用,則仍是須要構造大量的數據庫實例併爲這些小規模的數據庫分配存儲空間
- 對於那些並不十分複雜或重要,須要全職DBA花費大量時間管理的數據庫
- 爲了更好地利用硬件和DBA資源,用戶有必要將大量的部門級應用整合到少數幾個oracle RDBMS數據庫中以便部署和管理
Pluggable Database 可拔插數據庫容許DBA整合大量的小的部門級數據庫到一個更龐大的數據庫中。
Pluggable Database 帶來的好處
在一個集中化的平臺上操做多個數據庫將有效下降成本:
- 更少的實例損耗
- 更低的存儲成本
減小對DBA資源的使用,以及便於維護安全性:
- 無需應用修改
- 更快和簡便的配置
- 節省了打patch和升級的時間
- 分離了如下責任:
- 不一樣應用的管理員
- 應用程序管理員和DBA
- 應用用戶
- 提供isolation
- 保證與非CDB 完整的向後兼容性
- 完整的RAC操做使用
- 與Oracle Enterprise Manager和Resource Manager整合在一塊兒
- 能夠集中化管理多個數據庫
上圖給出了一個Container Database 並帶有4個Containers, ROOT(CDB$ROOT)和其餘的三個pluggable Database。每個Pluggable Database均擁有本身的獨立應用程序,這些Pluggable Database要麼有本身的DBA, 要麼被Container Administrator即SYS用戶管理;SYS用戶屬於root(CDB$ROOT) Container 是一個common user。 SYS用戶仍是像以前的版本那樣權威,他能夠管理root container 和其餘全部的pluggable database。 一個Pluggable Database可拔插數據庫是 一堆database schemas數據庫模式的集合以一個分離的數據庫邏輯形象呈現給用戶和應用程序。可是在物理級別,Container database擁有一個數據庫實例以及多個數據文件,和普通的非CDB是同樣的。 無論是客戶端程序仍是數據庫對象均無需修改,以適應CDB。 用戶將很方便地將一個非CDB 插入到一個CDB中, CDB避免瞭如下的冗餘:
一個CDB將多個應用合併到單一的一個實例中, 這致使 僅使用 一套後臺進程,一份SGA內存分配和root container中的一份數據字典。固然PDB還將在本身的數據字典中維護部分數據。
關於CDB 數據字典實際狀況的測試: 經過下面的實驗咱們能夠得出以下結論:
- 每個Container 維護本身的一套底層數據字典 數據實際存放在C_OBJ#(C_OBJ#