Oracle CBD结构和Non-CBD结构区别
Oracle Container Database (CDB) 和 Non-CDB(传统非容器数据库)结构的详细区别,附带结构图和对比表格:
1. CDB(Container Database)结构
CDB是Oracle 12c及以后版本引入的多租户架构的核心组件。CDB是一个大型的容器数据库,可以包含一个或多个Pluggable Database (PDB)。每个PDB都是一个独立的数据库实例,具有自己的数据文件、redo日志和控制文件,但共享CDB的资源(如内存、进程等)。
CDB结构特点:
- 多租户架构:支持多个PDB在一个CDB中运行。
- 资源共享:CDB和PDB共享某些资源(如内存、进程、共享池等),提高资源利用率。
- 统一管理:CDB提供统一的管理界面,简化了对多个PDB的管理。
- 灵活性:PDB可以动态插拔(Plug and Unplug),便于迁移和管理。
CDB结构图:
CDB
├── Root Container (CDB$ROOT)
│ └── 系统表空间(SYSTEM, SYSAUX)
├── Seed Container (PDB$SEED)
│ └── PDB模板
├── PDB 1
│ ├── 用户表空间
│ ├── 系统表空间
│ └── Redo日志
├── PDB 2
│ ├── 用户表空间
│ ├── 系统表空间
│ └── Redo日志
└── ...(更多PDB)
2. Non-CDB(传统非容器数据库)结构
Non-CDB是Oracle传统数据库结构,每个数据库实例都是一个独立的数据库,不依赖于CDB。Non-CDB只有一个实例,包含自己的数据文件、redo日志和控制文件,不支持多租户架构。
Non-CDB结构特点:
- 单实例:每个数据库是一个独立的实例,不共享资源。
- 独立管理:每个数据库需要单独管理,资源利用率较低。
- 灵活性较低:不支持PDB的动态插拔和迁移。
Non-CDB结构图:
Non-CDB
├── 用户表空间
├── 系统表空间
├── Redo日志
└── 控制文件
3. CDB与Non-CDB对比表格
特性 | CDB (Container Database) | Non-CDB (传统数据库) |
---|---|---|
架构 | 多租户架构,支持多个PDB在一个CDB中运行。 | 单实例架构,每个数据库独立运行。 |
资源共享 | CDB和PDB共享内存、进程等资源,提高资源利用率。 | 每个数据库独立使用资源,资源利用率较低。 |
管理复杂度 | 提供统一的管理界面,简化对多个PDB的管理。 | 每个数据库需要单独管理,管理复杂度较高。 |
扩展性 | 支持动态插拔PDB,便于扩展和迁移。 | 不支持PDB插拔,扩展性较低。 |
版本支持 | Oracle 12c及以上版本支持CDB架构。 | Oracle所有版本均支持Non-CDB架构。 |
性能 | 共享资源可能导致性能瓶颈,但整体资源利用率更高。 | 资源独立使用,性能相对稳定,但资源利用率较低。 |
应用场景 | 适用于需要多租户管理、资源共享和动态扩展的企业级应用场景。 | 适用于资源独立、管理简单的中小型数据库场景。 |
4. CDB的优势
- 资源利用率:CDB和PDB共享资源,减少硬件成本。
- 管理便捷性:统一管理多个PDB,简化运维。
- 灵活性:PDB可以动态插拔,便于迁移和扩展。
- 多租户支持:支持多个PDB同时运行,满足多租户需求。
5. Non-CDB的优势
- 独立性:每个数据库独立运行,资源不共享,适合对资源隔离要求高的场景。
- 兼容性:Non-CDB架构适用于所有Oracle版本,兼容性更好。
- 管理简单:单实例管理,适合中小型企业或简单场景。
6. 总结
- CDB适用于需要多租户管理、资源共享和动态扩展的企业级场景。
- Non-CDB适用于资源独立、管理简单的中小型数据库场景,但是它在20c版本被弃用了