首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Oracle 12c 核心新特性:可插拔數據庫 (PDB) 架構深度解析與實戰指南

     編輯:Oracle 教學

Oracle 12c 核心新特性:可插拔數據庫 (PDB) 架構深度解析與實戰指南

Oracle 12c 引入的多租戶架構是自 Oracle 8i 以來最顛覆性的架構變革。通過容器數據庫 (CDB) 與可插拔數據庫 (PDB) 的分離,實現了「一套實例、多個隔離租戶」的資源共享與邏輯隔離平衡。本文將從架構原理、生命周期管理、資源隔離、遷移升級、高可用五大維度深度解析 PDB 技術。

一、 架構原理:一個實例,多個租戶

CDB-PDB 架構圖
  • CDB$ROOT (CDB 根容器): 存儲公共用戶、公共角色、系統元數據、Redo/Undo/Controlfile 等共享資源。一個 CDB 僅有一個 ROOT。
  • PDB$SEED (種子 PDB): 隻讀模板,用於創建新 PDB,不可修改,包含 Oracle 內建對象。
  • 用戶 PDB (Application PDB / User PDB): 承載業務數據、私有用戶、私有對象。每個 PDB 獨立數據字典、表空間、服務名、時區、字符集 (18c+ 支持不同字符集)。
  • Application Root (應用根容器,12.2+): 中間層容器,支援應用級別的公共對象、版本化補丁、Proxy PDB,實現 SaaS 多租戶應用架構。

二、 生命周期管理:插拔遷移的藝術

1. 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;

2. PDB 狀態控制與自動化

-- 打開/關閉模式
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;

三、 資源隔離與管理:防止「吵鬧鄰居」

1. CDB 級資源管理計劃

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+ 內存上限%)。

2. PDB 級資源管理

PDB 內部可獨立運行 Resource Manager 計劃,管理消費者組、會話屬性,實現二級調度。

四、 遷移升級:非 CDB 到 PDB 的最佳路徑

  1. AutoUpgrade 工具 (19c/21c 推薦): 全自動化完成非 CDB → PDB 轉換、字符集遷移、時區升級、統計收集、網絡配置更新。
  2. DBMS_PDB.DESCRIBE / PLUG_IN: 手動生成 XML 元數據文件,結合 `NOCOPY` / `MOVE` / `COPY` 文件移動選項。
  3. 可傳輸表空間 (TTS) + PDB: 跨平台、跨 Endian、跨版本 (11.2.0.4 → 19c) 的極速遷移,停機時間僅為元數據導入時間。
  4. GoldenGate 雙寫同步遷移: 零停機遷移,源端非 CDB,目標端 PDB,通過提取/複寫進程實時同步,驗證無誤後割接。

五、 高可用與容災:PDB 級別的保護

  • Data Guard PDB 級故障轉移 (18c+): 單個 PDB 故障轉移至備庫,不影響同 CDB 其他 PDB,實現租戶級 RTO/RPO。
  • PDB 級備份恢復: RMAN `BACKUP PLUGGABLE DATABASE pdb_sales`、`RECOVER PLUGGABLE DATABASE pdb_sales`,獨立於 CDB 備份窗口。
  • Flashback PDB: `FLASHBACK PLUGGABLE DATABASE pdb_sales TO SCN 123456`,秒級邏輯錯誤回滾。
  • Application Continuity + PDB: 計劃內維護 (PDB Relocate/Unplug) 時,應用連接無感知遷移。

六、 運維最佳實踐清單

領域建議
密度規劃單 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 的必修課。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved