Oracle 12c 引入的多租戶架構是自 Oracle 8i 以來最顛覆性的架構變革。通過容器數據庫 (CDB) 與可插拔數據庫 (PDB) 的分離,實現了「一套實例、多個隔離租戶」的資源共享與邏輯隔離平衡。本文將從架構原理、生命周期管理、資源隔離、遷移升級、高可用五大維度深度解析 PDB 技術。
-- 從種子創建
CREATE PLUGGABLE DATABASE pdb_sales
ADMIN USER pdb_admin IDENTIFIED BY complex_password
FILE_NAME_CONVERT=('/u01/oradata/cdb/pdbseed/', '/u01/oradata/cdb/pdb_sales/')
STORAGE (MAXSIZE 100G MAX_SHARED_TEMP_SIZE 10G)
DEFAULT TABLESPACE users DATAFILE '/u01/oradata/cdb/pdb_sales/users01.dbf' SIZE 500M AUTOEXTEND ON;
-- 克隆現有 PDB (12.2+ 熱克隆無需源 PDB 唯讀)
CREATE PLUGGABLE DATABASE pdb_test FROM pdb_prod
FILE_NAME_CONVERT=('/u01/oradata/cdb/pdb_prod/', '/u01/oradata/cdb/pdb_test/')
KEYSTORE IDENTIFIED BY keystore_password; -- TDE 錢包遷移
-- 解插/插入遷移 (跨 CDB、跨版本、跨平台)
ALTER PLUGGABLE DATABASE pdb_sales CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE pdb_sales UNPLUG INTO '/tmp/pdb_sales.xml';
-- 目標 CDB
CREATE PLUGGABLE DATABASE pdb_sales USING '/tmp/pdb_sales.xml'
COPY FILE_NAME_CONVERT=('/source/path/', '/target/path/')
KEYSTORE IDENTIFIED BY keystore_password;
-- 打開/關閉模式 ALTER PLUGGABLE DATABASE pdb_sales OPEN READ WRITE; -- READ ONLY / RESTRICTED / UPGRADE / DOWNGRADE ALTER PLUGGABLE DATABASE pdb_sales CLOSE IMMEDIATE INSTANCES=ALL; -- RAC 全節點關閉 -- 保存狀態 (實例重啟後自動恢復) ALTER PLUGGABLE DATABASE pdb_sales SAVE STATE INSTANCES=ALL; -- 查看狀態 SELECT con_id, name, open_mode, restricted FROM v$pdbs;
BEGIN
DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN(plan => 'cdb_plan', comment => 'CDB Resource Plan');
-- 為 PDB 分配指令
DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN_DIRECTIVE(
plan => 'cdb_plan',
pluggable_database => 'PDB_SALES',
shares => 3, utilization_limit => 80, parallel_server_limit => 50);
DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN_DIRECTIVE(
plan => 'cdb_plan',
pluggable_database => 'PDB_HR',
shares => 1, utilization_limit => 40);
DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
END;
/
ALTER SYSTEM SET resource_manager_plan='cdb_plan' SCOPE=BOTH;
關鍵指標: `SHARES` (CPU 權重)、`UTILIZATION_LIMIT` (CPU 上限%)、`PARALLEL_SERVER_LIMIT` (並行服務器上限%)、`MEMORY_LIMIT` (19c+ 內存上限%)。
PDB 內部可獨立運行 Resource Manager 計劃,管理消費者組、會話屬性,實現二級調度。
| 領域 | 建議 |
|---|---|
| 密度規劃 | 單 CDB 建議 20-50 個 PDB,視 CPU/內存/IO 而定;超過 254 PDB 需啟用 `MAX_PDBS` 參數 (12.2+) |
| 網絡隔離 | 每個 PDB 獨立 `LOCAL_LISTENER` / `REMOTE_LISTENER`、獨立服務名 (`SERVICE_NAMES`),防止連接風暴傳播 |
| 備份策略 | CDB 級每日增量 L0/L1,PDB 級業務高峰期每小時增量,關鍵 PDB 啟用 ZDLRA 實時備份 |
| 補丁升級 | 優先使用 `DBMS_ROLLING` 滾動升級 CDB;Application Root 打補丁後 `SYNC_PDB` 批量推送至應用 PDB |
| 監控視圖 | 重點監控 `V$PDBS`、`CDB_PDB_HISTORY`、`V$RSRCPDBMETRIC` (CPU/IO/並行使用率)、`V$PDB_INCARNATION` |
PDB 架構將資料庫從「重資產」轉變為「輕服務」,配合雲原生編排 (Kubernetes Operator、OCI Database Service),成為企業構建 Database-as-a-Service (DBaaS) 平台的核心基石。掌握 PDB 生命周期、資源治理與遷移技術,是現代 Oracle DBA 的必修課。