将表存储在CDB还是PDB中?二者存储表存在差异吗?
Oracle 21c中CDB与PDB存储表的核心差异
作为Oracle 21c新手,针对测试场景,你需要明确CDB(容器数据库)和PDB(可插拔数据库)存储表的几个关键差异:
1. 隔离性完全不同
- CDB根容器(CDB$ROOT)的表:属于全局范围,所有PDB能看到CDB级的系统表,但你自己创建的用户表,默认情况下PDB内的用户无法访问,必须通过跨容器授权才能实现。而且所有PDB共享CDB根的资源,表的操作会影响全局环境。
- PDB内的表:每个PDB相当于独立的数据库实例,不同PDB的表完全隔离——哪怕两个PDB里有同名同结构的表,数据也互不干扰,测试时可以在不同PDB里跑完全独立的测试用例,不会互相影响。
2. 管理边界清晰区分
- CDB级表管理:只能由CDB管理员(如SYS、SYSTEM)操作,需要先切换到根容器:
ALTER SESSION SET CONTAINER=CDB$ROOT;。维护时要考虑对所有PDB的影响,测试场景下不适合存放业务测试表,避免打乱全局环境。 - PDB级表管理:由对应PDB的管理员负责,每个PDB可以单独启停、备份、恢复甚至删除重建。测试时你可以随便折腾某个PDB,比如测试完直接删掉重建新的PDB,完全不会影响CDB或其他PDB。
3. 资源分配更灵活(针对测试场景)
- CDB根的资源是所有PDB共享的,在CDB里存表会占用共享的CPU、内存、存储资源,可能影响其他PDB的测试效果。
- 每个PDB可以通过CDB资源管理器单独设置资源配额,比如给某个测试PDB分配更多CPU,模拟高负载场景,或者限制某个PDB的资源,测试系统在资源不足时的表现,这在CDB根里是做不到的。
4. 测试场景的最佳实践
因为你是测试场景,优先把表放在PDB里:
- 每个测试任务用独立的PDB,方便隔离测试数据和环境;
- 可以快速克隆PDB,复制测试环境,对比不同参数下的测试结果;
- 测试完成后可以直接删除PDB,清理环境,不会留下全局垃圾。
内容的提问来源于stack exchange,提问作者alexzhvv
相关产品推荐
相关产品推荐

