oracle中的 CDB 和 PDB 详解

在 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 实例 单独 OPENCLOSE
连接方式 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 登录。

✅ 七、典型应用场景

  1. 云数据库服务(DBaaS)
    • 为不同客户分配独立 PDB,实现资源隔离;
  2. 开发/测试/生产环境整合
    • 同一 CDB 中运行 DEV、TEST、PROD 三个 PDB;
  3. 快速克隆
    • 从 PDB $ SEED 秒级创建新 PDB;
  4. 简化运维
    • 一次备份 CDB,包含所有 PDB。

✅ 总结

表格

概念 核心要点
CDB 容器,管理多个 PDB,共享资源
PDB 可插拔数据库,对应用透明,独立业务单元
关键价值 资源整合 + 管理简化 + 快速部署
使用原则 业务数据放 PDB,系统管理在 CDB
相关推荐
SeaTunnel43 分钟前
深度解析 Apache SeaTunnel 核心引擎三大技术创新:高可靠异步持久化与 CDC 架构优化实战
大数据·数据库·架构·apache·seatunnel
2401_865439632 小时前
HTML函数在低温环境下启动慢吗_温度对硬件启动影响【方法】
jvm·数据库·python
NotFound4862 小时前
分享实战心得PostgreSQL 主从复制:告别单点故障,附主从切换与延迟监控命令
数据库·postgresql
minebmw78 小时前
Oracle 19.29 中 ORA-00600 [4193] 错误完全解析与恢复指南
数据库·oracle
m0_377618238 小时前
Golang怎么连接MySQL数据库_Golang MySQL连接教程【总结】
jvm·数据库·python
weixin_586061469 小时前
C#怎么通过反射获取类属性_C#如何动态读取元数据【进阶】
jvm·数据库·python
Pluto_CSND9 小时前
PostgreSQL 聚合函数总览
数据库·postgresql
资深数据库专家9 小时前
总账EBS 应用服务器1 的监控分析
java·网络·数据库
m0_6784854510 小时前
CSS如何控制表格单元格边框合并_通过border-collapse实现
jvm·数据库·python
m0_7488394910 小时前
如何用组合继承模式实现父类方法复用与子类属性独立
jvm·数据库·python