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