Oracle:容器数据库简介
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和名稱。
注意:
一個 CDB 可以包含 253 個 PDB(去掉一個是 seed 還能創建 252 個 PDB)。
文件
數據文件:ROOT,SEED 以及每一個 PDB 的數據文件是獨立的。
REDO:一個單實例的 CDB 有一個 redo log;RAC 環境中每個實例有一個 redo log。
control?file:?一個 CDB 也僅有一個控制文件(可以多路復用)。
參數文件:一個 CDB 使用一個 SPFILE 或者一個 PFILE,其中為 ROOT 設置的參數的值可以被 PDB 繼承。另外,也可以使用 ALTER SYSTEM 語句來設置 PDB 的參數。對參數文件執行操作時,必須使用 common user 并且使用 AS SYSDBA、ASSYSOPER、AS SYSBACKUP來連接數據庫。要創建 CDB,必須要將初始化參數 ENABLE_PLUGGABLE_DATABASE 的值設置為 TRUE。
進程:只有一組后臺進程,它們被 ROOT 和所有 PDB 共享。
數據庫設置
字符集:所有 PDB 的字符集都使用 CDB 的字符集。
時區:可以設置所有 PDB 的時區與 CDB 相同,也可以單獨為 PDB 設置時區。
db_size:塊大小被應用于整個 CDB。
db_name:ROOT 的全局數據庫名就是 CDB 的全局數據庫名;PDB 的全局數據庫名是由 PDB name 和 DB_DOMAIN 參數共同定義的。
表空間:
ROOT 與每一個 PDB 都有自己的 SYSAUX 表空間和 SYSTEM 表空間。可以為 ROOT 和每一個 PDB 設置默認表空間。而默認的臨時表空間對于整個 CDB 只有一個,但是可以為每個 PDB 創建臨時表空間。
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 的獨立和安全。
總結
以上是生活随笔為你收集整理的Oracle:容器数据库简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL备份与恢复——基于OUTFIL
- 下一篇: MySQL开启SSL的利与弊