在 Oracle 数据库中,CDB(Container Database,容器数据库) 和 PDB(Pluggable Database,可插拔数据库) 是 多租户架构(Multitenant Architecture) 的核心组成部分,自 Oracle 12c(2013年) 起引入。
✅ 一、基本定义
表格
| 名称 | 全称 | 中文含义 | 角色 |
|---|---|---|---|
| CDB | Container Database | 容器数据库 | "母体"或"主机",管理多个 PDB |
| PDB | Pluggable Database | 可插拔数据库 | "子数据库",独立运行的应用数据库 |
💡 类比:
- CDB 像 一台物理服务器;
- PDB 像 虚拟机(VM),每个 VM 运行独立应用,但共享底层资源(CPU、内存、存储)。
✅ 二、CDB 的组成结构
一个 CDB 包含以下 固定组件:

1. CDB $ ROOT(根容器)
- 存储 Oracle 系统元数据(如数据字典、PL/SQL 包);
- 管理公共用户(Common Users,如
SYS,C##ADMIN); - 不能存储用户业务数据(Oracle 官方建议)。
2. PDB $ SEED(种子模板)
- 只读的 PDB 模板;
- 用于快速克隆创建新 PDB;
- 不可修改 ,名称固定为
PDB$SEED。
3. 用户创建的 PDB(0~252 个)
- 每个 PDB 是一个完整的、独立的逻辑数据库;
- 对应用程序透明(应用认为自己连接的是普通 Oracle DB);
- 可单独打开/关闭、备份/恢复、迁移。
✅ 三、CDB 与 PDB 的关键区别
表格
| 特性 | CDB | PDB |
|---|---|---|
| 作用 | 容器,管理多个 PDB | 独立业务数据库 |
| 用户类型 | 公共用户(C##USER) |
本地用户(APP_USER) |
| 数据存储 | 系统元数据 | 用户表、索引、业务数据 |
| 启动方式 | 启动整个 CDB 实例 | 单独 OPEN 或 CLOSE |
| 连接方式 | sqlplus / as sysdba → 默认进 CDB $ ROOT |
需指定服务名:@//host:port/PDB_NAME |
| 数量限制 | 1 个 CDB 每实例 | 最多 252 个 PDB(19c+) |
✅ 四、为什么需要 CDB/PDB?(优势)
表格
| 传统架构(Non-CDB) | 多租户架构(CDB/PDB) |
|---|---|
| 每个数据库需独立实例 | 多个 PDB 共享一个实例 |
| 内存/进程重复消耗 | SGA/PGA/后台进程共享 → 节省资源 |
| 升级/打补丁需逐个操作 | 统一管理:一次操作影响所有 PDB |
| 迁移困难 | PDB 可"拔出-插入" 到其他 CDB(秒级迁移) |
| 资源隔离弱 | Resource Manager 可分配 CPU/IO 配额 |
📊 示例:
50 个 PDB 仅需 3GB 内存 ,而 50 个独立数据库需 20GB+(Oracle 官方测试)。
✅ 五、常用操作命令
1. 判断是否为 CDB
SELECT name, cdb FROM v$database;
-- CDB = YES 表示是容器数据库
2. 查看当前容器
SHOW CON_NAME;
-- 输出:CDB$ROOT / PDB$SEED / YOUR_PDB
3. 列出所有 PDB
SHOW PDBS;
-- 或
SELECT con_id, name, open_mode FROM v$pdbs;
4. 切换到 PDB
ALTER SESSION SET CONTAINER = ORCLPDB;
5. 打开 PDB
-- 在 CDB$ROOT 中执行
ALTER PLUGGABLE DATABASE ORCLPDB OPEN;
✅ 六、用户类型对比
表格
| 用户类型 | 创建位置 | 命名规则 | 作用范围 |
|---|---|---|---|
| 公共用户(Common User) | CDB $ ROOT | 必须以 C## 开头(如 C##ADMIN) |
所有 PDB + CDB |
| 本地用户(Local User) | PDB 内部 | 任意合法名(如 HR, APP_USER) |
仅当前 PDB |
⚠️ 注意:
- 公共用户可在任意 PDB 登录;
- 本地用户只能在所属 PDB 登录。
✅ 七、典型应用场景
- 云数据库服务(DBaaS)
- 为不同客户分配独立 PDB,实现资源隔离;
- 开发/测试/生产环境整合
- 同一 CDB 中运行 DEV、TEST、PROD 三个 PDB;
- 快速克隆
- 从 PDB $ SEED 秒级创建新 PDB;
- 简化运维
- 一次备份 CDB,包含所有 PDB。
✅ 总结
表格
| 概念 | 核心要点 |
|---|---|
| CDB | 容器,管理多个 PDB,共享资源 |
| PDB | 可插拔数据库,对应用透明,独立业务单元 |
| 关键价值 | 资源整合 + 管理简化 + 快速部署 |
| 使用原则 | 业务数据放 PDB,系统管理在 CDB |