概述
今天主要介紹下Oracle 12c的新特性--多租戶。
參考:https://www.cnblog.com/kingle-study/p/10695830.html
相關概念
1、多租戶
多租戶這個概念並不是12C的新特性,而是體系架構,多租戶架構使得oracle 資料庫成為了一個多租戶的容器資料庫,也就是container database,也就是CDB。而一個CDB可以包含0個、一個或者多個用戶創建的可插入的資料庫,也就是pluggable database,也就是PDB,也就是所謂的「租戶」。這就像合租房一樣,每個租戶可以獲得其所需的各種資源。也可以說CDB就是各PDB的母體。
2、多租戶架構
一個CDB包括零個,一個或多個用戶創建的可插拔資料庫(PDBs)。PDB是模式、模式對象和非模式對象的可移植集合,在Oracle NET客戶機看來,Oracle資料庫12c之前的所有Oracle資料庫都是非CDB。
ORACLE 12C 是世界上第一款基於雲計算設計的多租戶資料庫,底層為一個多租戶的架構,支持雲計算(共享軟硬體資源,降低成本),等同於把多個數據塊當成一個數據塊來管理,即共享伺服器,共享作業系統,共享數據塊。
3、CDB容器
容器是多租戶體系結構中數據或元數據的邏輯集合。
每個CDB都有以下容器:
1)只有一個CDB根容器(也稱為根容器)
cdb根是所有pdb所屬的模式、模式對象和非模式對象的集合。根存儲Oracle提供的元數據和普通用戶。元數據的一個例子是Oracle提供的PL/SQL包的原始碼。公共用戶是每個容器中已知的資料庫用戶。根容器名為cdb$root。
2)只有一個系統容器
系統容器包括根CDB和CDB中的所有PDB。因此,系統容器是CDB本身的邏輯容器。
3)零個或多個應用程式容器
應用程式容器僅由一個應用程式根組成,PDB插入到該根。雖然系統容器包含cdb根目錄和cdb中的所有pdb,但是應用程式容器只包含插入到應用程式根目錄中的pdb。應用程式根屬於cdb根,沒有其他容器。
4)零個或多個用戶創建的PDB
PDB包含特定功能集所需的數據和代碼。例如,PDB可以支持特定的應用程式,例如人力資源或銷售應用程式。創建CDB時不存在PDB。您可以根據業務需求添加PDB。
PDB正好屬於零或一個應用程式容器。如果PDB屬於應用程式容器,則它是應用程式PDB。例如,Cust1_PDB和Cust2_PDB應用程式PDB可能屬於SaaS_Sales_AC應用程式容器,在這種情況下,它們不屬於其他應用程式容器。應用程式種子是可選的應用程式PDB,充當用戶創建的PDB模板,使您能夠快速創建新的應用程式PDB。
5)只有一個SEED pdb
SEED PDB是由系統提供的模板,CDB可以使用它來創建新的PDB。SEED pdb被命名為pdb$seed。不能在pdb$seed中添加或修改對象。
多租戶的優勢
1、使用多租戶體系結構進行資料庫整合優勢:
1 )降低成本
通過將硬體和資料庫基礎結構整合到一組後台進程,並高效地共享計算和內存資源,可以降低硬體和維護成本。例如,單個伺服器上的100個PDB共享一個資料庫實例。
2) 更容易、更快速地移動數據和代碼
通過設計,您可以快速地將PDB插入CDB,從CDB中拔下PDB,然後將此PDB插入不同的CDB。您還可以在PDB保持可用時克隆它們。您可以使用任何字符集插入PDB,並在不進行字符集轉換的情況下訪問它。如果cdb的字符集是cdb的字符集是al32utf8,那麼同一cdb中可以存在具有不同資料庫字符集的pdb。
3) 更容易管理和監控物理資料庫
CDB管理員可以通過為所有託管租戶和CDB根執行單個操作(如修補或執行RMAN備份)將環境作為聚合進行管理。簡化了備份策略和災難恢復。
4) 數據和代碼分離
雖然PDB合併到一個物理資料庫中,但它模擬了非CDB的行為。例如,如果用戶錯誤丟失了關鍵數據,那麼PDB管理員可以使用Oracle Flashback或時間點恢復來檢索丟失的數據,而不會影響其他PDB。
5) 確保行政職責分離
普通用戶可以連接到其具有足夠權限的任何容器,而本地用戶僅限於特定的PDB。管理者可以按如下方式劃分職責:
管理員使用公用帳戶管理CDB或應用程式容器。因為權限包含在授予它的容器中,所以一個PDB上的本地用戶對同一個CDB中的其他PDB沒有權限。
管理員使用本地帳戶管理單個PDB。
6 )易於性能調整
收集單個資料庫的性能指標比收集多個資料庫的性能指標更容易。一個SGA的尺寸比100個SGA的尺寸更容易。
7 )更少的資料庫補丁和升級
對一個資料庫應用補丁比對100個資料庫應用補丁更容易,對一個資料庫進行升級也比對100個資料庫進行升級更容易。
2、多租戶架構對可管理性的好處
1) 更容易升級數據和代碼
例如,不需要將CDB從一個資料庫版本升級到另一個資料庫版本,您可以從現有CDB中快速拔出PDB,然後將其從更高版本插入到新創建的CDB中。
2 )更容易在伺服器之間遷移
要執行負載平衡或滿足SLA,您可以將應用程式資料庫從本地數據中心遷移到雲,或者在同一環境中的兩個伺服器之間遷移。
3 )防止PDB中的數據損壞
可以將PDB快閃記憶體回特定於SCN或PDB的還原點,而不影響其他PDB。此功能類似於非CDB的閃回資料庫功能。
能夠在單個位置安裝、管理和升級特定於應用程式的數據和元數據
可以將一組特定於應用程式的PDB定義為單個組件,稱為應用程式容器。然後可以在此容器中定義一個或多個應用程式。每個應用程式都是此應用程式容器中共享的一組命名的、版本控制的通用元數據和數據。
例如,SaaS供應商的每個客戶都可以擁有自己的應用程式PDB。每個應用程式PDB可能都有相同定義的表,名為sales-mlt,每個PDB中有不同的數據。PDB可以共享一個名為「國家」的數據連結公共對象,每個PDB中都有相同的數據。作為應用程式管理員,您可以管理主應用程式定義,以便每個新客戶都獲得具有相同對象的PDB,並且對現有模式的每個更改(例如,添加新表或更改表的定義)都適用於共享應用程式定義的所有PDB。
4) 與Oracle資料庫資源管理器集成
在多租戶環境中,一個問題是運行在同一伺服器上的PDB之間的系統資源爭用。另一個問題是限制資源使用以獲得更一致、可預測的性能。要解決此類資源爭用、使用和監視問題,請使用Oracle資料庫資源管理器。
相關命令
1、查看管理用戶是否是CDB
SQL> SELECT NAME, CDB, CON_ID FROM V$DATABASE;
2、查看狀態
select name ,open_mode from v$pdbs ;
後面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注一下~