Oracle 12c一個重要新特性是插接式數據庫。
插接式數據庫由一個使用 CDB(Container Database)選項創建的容器數據庫和一個或多個 PDB(Pluggable Database)組成,CDB 作為容器容納 PDB,而 PDB 彼此隔離,就像一個獨立的數據庫般在 CDB 中存在。PDB 是一組 Schema 的集合,在 CDB 中作為一個獨立的組件容器而存在。從這個意義上說,PDB 也是一種容器(Container), 而 CDB 中可以存在多種不同類型的容器。
CDB 的組成
① ROOT
Root 是一個系統提供的容器,用於存儲公用用戶,公用用戶可以連接到其他容器,可以查看系統級元數據,這個 Root 容器被命名為 CDB$ROOT.
② Seed PDB
種子 PDB 是一個系統級模版,CDB 可以用這個模版創建其他 PDB,種子 PDB 的名稱是 PDB$SEED,其中的對象不能被修改。這其中最為主要的是 SYSTEM 和 SYSAUX 表空間文件,這是一個種子數據庫,已經內置了字典對象,如果使用模板方式建庫,PDB 則由此克隆創建出來。
容器 CDB$ROOT 和 PDB$SEED 對於一個插接式數據庫來說是必須的基本組件,這兩者構成了插接式數據庫的基礎支撐。其關系如下圖所示:
③ PDB
PDB 是用戶基於特定需求建立的對象容器,在創建 CDB 時,可以不同時創建 PDB,PDB 隨后可以根據用戶的需求創立。
插接式數據庫的主要特性:
可以通過現有數據庫快速配置和部署新的環境;
通過 unplug 和 plug 可以快速進行數據庫遷移和整合;
集中的部署可以加快升級遷移的過程,縮減維護成本;
方便的整合和拆分方式便於集中部署或在壓力過大時迅速拆分部署;
分離管理員的職責,強化安全管理;
在 CDB 的模式下,由於 PDB 具有獨立的 SYSTEM 和 SYSAUX 表空間,其元數據和系統元數據自然分離,用戶數據的字典信息也就無需再記錄到系統的元數據中,這對於核心的元數據是一種更好的隔離和保護,下圖描述了在 CDB、PDB 模式下用戶數據和元數據的分離關系,其中數據字典元數據也就是 Root Container:
各個容器都有一個標識(CON_ID),其中CDB實例的ID為0,CDB$ROOT 的ID為1,PDB$SEED的ID為2,pdb從3開始分配。