Oracle PDB 概念与架构
日期 :2026-03-18
来源 :https://docs.oracle.com/en/database/oracle/oracle-database/19/multi/introduction-to-the-multitenant-architecture.html
标签:#Oracle #PDB #多租户 #CDB
核心概念
Oracle 12c 引入多租户架构,允许一个 Oracle 数据库作为容器数据库(CDB)运行,内部承载多个可插拔数据库(PDB)。
容器类型
| 容器 | 说明 |
|---|---|
CDB Root (CDB$ROOT) |
存储 Oracle 元数据和公共用户,每个 CDB 只有一个 |
| PDB$SEED | 系统提供的种子模板,用于创建新 PDB,不可修改 |
| PDB | 用户创建的可插拔数据库,对应用来说像一个完整独立数据库 |
| 应用容器 | 包含应用根和一组相关应用 PDB,用于多租户应用场景 |
| 系统容器 | 逻辑容器,包含 Root 和所有 PDB |
用户类型
- 公共用户(Common User):在 CDB 所有容器中均存在,如 SYS
- 本地用户(Local User):仅存在于某个 PDB,权限不跨容器
架构示意
CDB(容器数据库)
├── CDB$ROOT(根容器)
├── PDB$SEED(种子,只读)
├── PDB1(用户数据库 A)
├── PDB2(用户数据库 B)
└── 应用容器
├── 应用根
├── 应用种子
└── 应用 PDB
核心优势
- 资源共享:多个 PDB 共享同一套内存和后台进程,降低成本
- 快速移植:PDB 可整体插入/拔出,迁移极为便捷
- 隔离性:每个 PDB 有自己的数据字典和表空间,互不影响
- 独立恢复:可对单个 PDB 执行 Flashback,不影响其他 PDB
- 字符集灵活:CDB 使用 AL32UTF8 时,各 PDB 可用不同字符集
重要限制
⚠️ 数据库一旦创建就固定为 CDB 或非 CDB,不可转换。
sql
-- 创建 CDB(必须在建库时声明)
CREATE DATABASE cdb1
ENABLE PLUGGABLE DATABASE;
-- 验证是否为 CDB
SELECT NAME, CDB FROM V$DATABASE;
常用查询
sql
-- 查看所有 PDB
SHOW PDBS;
SELECT NAME, OPEN_MODE FROM V$PDBS;
-- 查看当前所在容器
SHOW CON_NAME;
SHOW CON_ID;
-- 切换到指定 PDB
ALTER SESSION SET CONTAINER = pdb_name;