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
相关推荐
Shan120520 小时前
站在计算机领域视角看:SQL注入攻击
网络·数据库·sql
轻刀快马21 小时前
别干背八股文了:从一场“双十一秒杀”惨案,看懂 InnoDB 事务、锁与索引的底层齿轮
数据库·sql
万事大吉CC21 小时前
【1】Django 基础:MTV 架构与核心组件
数据库·架构·django
曾凡宇先生21 小时前
mysql局域网授权
数据库·mysql
xcLeigh1 天前
IoTDB Rust 原生接口开发指南:从零生成 + 完整 RPC 调用
数据库·rpc·rust·接口·api·时序数据库·iotdb
努力努力再努力wz1 天前
【MySQL 进阶系列】拒绝滥用root:从 mysql.user 到权限校验,带你彻底理解用户管理与授权机制!
android·c语言·开发语言·数据结构·数据库·c++·mysql
薛定谔的悦1 天前
储能充放电状态机执行逻辑详解
linux·数据库·能源·储能·bms
Elastic 中国社区官方博客1 天前
Elasticsearch percolator 用于电商搜索治理:将模糊查询转换为可控的检索策略
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
zxrhhm1 天前
PostgreSQL 中的层级查询 Oracle CONNECT BY 替代方案
数据库·postgresql·oracle
万事大吉CC1 天前
【3】深入剖析 Django 之 MTV:路径引用与资源加载机制
数据库·django·sqlite