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
相关推荐
woniu_buhui_fei2 小时前
MySQL知识整理一
数据库·mysql
hopsky2 小时前
Kingbase SQL 解析方案
数据库·sql
Elastic 中国社区官方博客2 小时前
Elasticsearch:shell 工具不是上下文工程的银弹
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
Mike117.2 小时前
做 GBase 8c 迁移适配时,我更先盯兼容模式、对象改造和 SQL 行为差异,而不是急着把数据先搬过去
数据库
V1ncent Chen2 小时前
SQL大师之路 16 集合操作(Union/Intersect/Except)
数据库·sql·mysql·数据分析
huohuopro3 小时前
Hbase学习
学习·oracle·hbase
SadSunset3 小时前
第三章:Redis 客户端工具
数据库·redis·缓存
tkevinjd3 小时前
Redis主从复制
数据库·redis·后端·缓存·面试
进击的女IT3 小时前
Java使用poi-tl实现word模版渲染文本/图片
java·数据库·word