一库容百库:深度解析Oracle多租户架构CDB与PDB的核心奥秘
|
🌺The Begin🌺点点关注,收藏不迷路🌺
|
一、开篇颠覆认知:为什么Oracle要搞“合租房”?
在Oracle 12c之前,一家公司如果有10个业务系统,通常需要创建10套独立的数据库实例。每个实例都有自己的SGA、后台进程、参数文件,就像10栋独立别墅,占用了大量服务器资源。
Oracle 12c推出的多租户架构(Multitenant Architecture) 彻底改变了这一局面。它让多个“可插拔数据库”共享同一个实例,就像把独立别墅改成了共享大堂的高层公寓——公摊面积(SGA、后台进程)大家分摊,自家房间(PDB)各过各的日子。
一组震撼的数据:
- 传统10个实例:需要10块SGA、10组后台进程、10份参数文件维护。
- 多租户1个CDB+10个PDB:只需1块SGA、1组后台进程、1份参数文件。硬件资源节省高达90%。
二、全景架构图:CDB与PDB的层次关系
先通过一张架构图,从整体上把握多租户架构的组织逻辑:
关键解读:
- 蓝色(CDB$ROOT): 整个架构的“房东”,管理所有PDB的元数据。
- 紫色(PDB$SEED): 只读模板库,快速创建新PDB的“克隆母体”。
- 绿色(用户PDB): 真正的业务数据库,彼此逻辑隔离。
- 橘色(应用连接): 每个PDB对外表现为一个独立数据库。
三、核心概念拆解:什么是CDB?什么是PDB?
1. CDB(Container Database):容器数据库
精确描述:
CDB是Oracle多租户架构的顶层容器,它包含一组PDB的集合。从物理层面看,它就是一个完整的Oracle数据库实例,但从逻辑层面看,它是零个或多个PDB的“宿主环境”。
CDB的三大组成部分:
| 序号 | 组件名称 | 角色定位 | 核心功能 |
|---|---|---|---|
| 1 | CDB$ROOT | 根容器 | 存储Oracle系统元数据、公共用户、公共对象 |
| 2 | PDB$SEED | 种子容器 | 只读模板,用于快速克隆创建新PDB |
| 3 | PDB | 可插拔数据库 | 用户业务数据的实际存放地 |
CDB的核心特征:
- 实例只有一个: 一个CDB对应一个Oracle实例,所有PDB共享该实例的SGA和后台进程。
- 全局管控者: CDB$ROOT管理所有PDB的创建、打开、关闭、拔出、插入。
- 公共资源池: 公共用户、公共角色、公共权限在CDB$ROOT中统一管理。
2. PDB(Pluggable Database):可插拔数据库
精确描述:
PDB是Oracle多租户架构中的业务容器,它对应用程序来说就是一个完全独立的数据库。每个PDB拥有独立的表空间、数据文件、用户、权限、数据字典视图。
PDB的“四独立”特征:
- 独立的数据文件: 每个PDB有自己的物理数据文件,不与其他PDB共享。
- 独立的表空间: 财务PDB的表空间与HR PDB的表空间完全隔离。
- 独立的用户体系: PDB可以创建本地用户,该用户只能访问本PDB的数据。
- 独立的数据字典: 每个PDB内部查询
DBA_TABLES,只能看到自己的表。
PDB的三种状态:
- OPEN READ WRITE: 正常读写,应用可访问。
- OPEN READ ONLY: 只读模式,用于报表查询。
- MOUNTED: 挂载但未打开,DBA可进行管理操作。
四、CDB与PDB的七大核心区别:一张表彻底分清
| 序号 | 对比维度 | CDB(容器数据库) | PDB(可插拔数据库) |
|---|---|---|---|
| 1 | 层级定位 | 顶层容器,PDB的“宿主” | 容器内的“住户”,业务数据的实际载体 |
| 2 | 实例关系 | 一个CDB = 一个Oracle实例 | 所有PDB共享同一个CDB实例 |
| 3 | 数据独立性 | 存储Oracle系统元数据 | 完全独立的数据文件与表空间 |
| 4 | 用户体系 | 公共用户(Common User),对所有PDB可见 | 本地用户(Local User),仅对本PDB有效 |
| 5 | 可迁移性 | 固定在一个实例上 | 可拔出、插入到另一个CDB中 |
| 6 | 数据库视图 | 拥有全局视图 CDB_xxx | 只能看到本PDB的 DBA_xxx 视图 |
| 7 | 备份恢复粒度 | 必须备份整个CDB | 可单独备份和恢复某个PDB |
五、多租户架构的四大核心优势:为什么必须上CDB?
1. 优势一:资源密度革命性提升
传统架构:
实例1(财务):SGA=2G, 后台进程=30个
实例2(HR): SGA=2G, 后台进程=30个
实例3(销售):SGA=2G, 后台进程=30个
总计:SGA=6G, 进程=90个
多租户架构:
CDB实例(财务+HR+销售):SGA=4G, 后台进程=30个
SGA节省33%,进程数减少66%,一台服务器可以承载更多数据库。
2. 优势二:快速克隆与迁移
传统建库: 备份 → 还原 → 配置 → 调优,至少1小时。
PDB克隆:
-- 从PDB$SEED创建一个新PDB,只需几秒!
CREATE PLUGGABLE DATABASE pdb_new ADMIN USER admin IDENTIFIED BY passwd
FILE_NAME_CONVERT = ('/pdbseed/', '/pdb_new/');
PDB拔插迁移:
-- 将PDB从CDB1拔出
ALTER PLUGGABLE DATABASE pdb_sales CLOSE;
ALTER PLUGGABLE DATABASE pdb_sales UNPLUG INTO '/backup/pdb_sales.xml';
-- 将PDB插入CDB2
CREATE PLUGGABLE DATABASE pdb_sales USING '/backup/pdb_sales.xml';
跨服务器迁移一个数据库,只需几分钟,而不是传统RMAN备份还原的数小时。
3. 优势三:统一管理与滚动升级
统一打补丁:
- 在CDB$ROOT打一个PSU补丁,所有PDB自动继承。
- 不再需要逐个实例停机维护。
滚动升级策略:
- 将PDB从旧版本CDB拔出。
- 插入到新版本CDB中。
- 无需传统的数据导出导入。
4. 优势四:精细化的安全隔离
逻辑隔离保证:
- 财务PDB的DBA只能管理财务PDB,看不到HR PDB的任何数据。
- 应用只能连接到指定的PDB,无法跨PDB访问。
资源隔离:
-- 为每个PDB设置资源限制
ALTER SYSTEM SET CPU_COUNT=2 SCOPE=PDB;
ALTER SYSTEM SET SGA_TARGET=1G SCOPE=PDB;
六、多租户架构的内部运行机制:一条SQL的跨容器之旅
当应用连接到PDB执行查询时,Oracle内部是如何处理的?
关键机制:连接PDB时,Oracle在PGA中切换容器上下文。应用以为自己连接的是独立数据库,实际上底层SGA和进程都是共享的。
七、实战操作:CDB环境下的日常管理
1. 查看当前所处的容器
-- 查看当前容器
SQL> SHOW CON_NAME;
CON_NAME
------------------------------
CDB$ROOT
-- 切换到指定PDB
SQL> ALTER SESSION SET CONTAINER = pdb_finance;
SQL> SHOW CON_NAME;
CON_NAME
------------------------------
PDB_FINANCE
2. 查询全局视图 vs 本地视图
-- 在CDB$ROOT查询所有PDB的数据文件
SELECT con_id, name FROM V$DATAFILE;
-- 在PDB内部查询,只能看到本PDB的数据文件
SELECT name FROM V$DATAFILE;
3. 创建公共用户 vs 本地用户
-- 在CDB$ROOT创建公共用户(所有PDB可见)
CREATE USER C##admin IDENTIFIED BY passwd CONTAINER=ALL;
GRANT DBA TO C##admin CONTAINER=ALL;
-- 在PDB内部创建本地用户(仅本PDB可见)
ALTER SESSION SET CONTAINER = pdb_finance;
CREATE USER finance_admin IDENTIFIED BY passwd;
GRANT DBA TO finance_admin;
八、多租户架构的适用场景与局限性
1. 最适合的场景
- 数据库整合: 将几十个小数据库整合到一个CDB中,大幅节省资源。
- 开发测试环境: 快速克隆生产PDB,秒级创建测试库。
- SaaS多租户应用: 每个客户一个PDB,逻辑隔离,统一管理。
- 数据库即服务(DBaaS): 云平台通过PDB提供独立数据库服务。
2. 需要谨慎的场景
- 需要不同数据库版本: 所有PDB共享同一个Oracle二进制版本。
- 需要不同字符集: CDB级别的字符集统一设定。
- 极高的实例级隔离要求: PDB是逻辑隔离,不是物理隔离。
九、总结:多租户架构的“三个记住”
【CDB是公寓楼,PDB是精装房】
- 记住一: CDB是唯一的实例,PDB是逻辑上的独立数据库。
- 记住二: 所有PDB共享SGA和后台进程,但数据文件完全独立。
- 记住三: PDB可以拔插迁移,这是Oracle向云原生架构演进的关键技术。
从Oracle 20c开始,多租户架构已经成为唯一支持的架构。如果你还在使用传统的非CDB数据库,现在是时候规划迁移了。
你的生产环境已经升级到CDB/PDB架构了吗?在迁移过程中遇到了哪些坑?欢迎在评论区分享你的实战经验。

|
🌺The End🌺点点关注,收藏不迷路🌺
|
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/qq_41840843/article/details/162770721




