Oracle CDB 与 Non-CDB (NoCDB) 的区别

发布于:2025-05-14 ⋅ 阅读:(19) ⋅ 点赞:(0)

Oracle CDB 与 Non-CDB (NoCDB) 的区别
Oracle数据库中的CDB(Container Database,容器数据库)和Non-CDB(非容器数据库,也称为NoCDB)是两种不同的数据库架构,主要区别如下:

  1. 基本概念
    CDB (Container Database):

12c版本引入的多租户架构

包含一个根容器(CDB$ROOT)和多个可插拔数据库(PDB)

允许多个PDB共享同一套数据库实例和后台进程

Non-CDB (NoCDB):

传统Oracle数据库架构

11g及之前版本的唯一架构形式

每个数据库完全独立,不共享资源

  1. 主要区别
    特性 CDB Non-CDB
    架构 多租户容器架构 单一独立架构
    数据库数量 一个CDB可包含多个PDB 一个实例对应一个数据库
    资源共享 PDB共享SGA、PGA和后台进程 不共享资源
    管理方式 集中管理多个PDB 单独管理每个数据库
    升级/补丁 只需升级CDB,所有PDB自动升级 每个数据库单独升级
    数据字典 有CDB级别和PDB级别的数据字典 单一数据字典
    12c以后版本默认 是 否(需特别指定)
  2. 内部结构差异
    CDB结构:
    根容器(CDB$ROOT): 包含整个CDB的元数据

种子PDB(PDB$SEED): 创建新PDB的模板

用户PDB: 用户创建的实际可插拔数据库

公共用户: 在CDB级别创建,可访问所有PDB

本地用户: 仅在特定PDB内有效

Non-CDB结构:
单一数据库结构

所有用户和对象都在同一命名空间

无容器概念

  1. 使用场景
    CDB适合:
    需要管理多个相似数据库的环境

云环境或多租户应用

需要快速部署新数据库实例的场景

资源整合和统一管理的需求

Non-CDB适合:
传统单一应用数据库

需要完全隔离的环境

兼容旧版本的应用

特殊场景下对多租户有限制的环境

  1. 转换与兼容性
    可以将Non-CDB转换为PDB(使用DBMS_PDB包)

PDB可以拔插到不同CDB中

大多数应用无需修改即可在PDB中运行

12c以后版本默认创建CDB,但可通过-noncdbcompatible参数创建Non-CDB

  1. DBA操作差异
    CDB特有操作:
    sql
    – 查看所有PDB
    SELECT name, open_mode FROM v$pdbs;

– 切换到特定PDB
ALTER SESSION SET CONTAINER=pdbname;

– 创建新PDB
CREATE PLUGGABLE DATABASE pdbname ADMIN USER pdbadmin IDENTIFIED BY password;
Non-CDB操作:
所有操作都在单一数据库上下文中执行

无需容器切换命令

  1. 性能考虑
    CDB优势:

资源共享减少总体内存需求

集中管理降低维护成本

快速PDB克隆和部署

Non-CDB优势:

无多租户开销

完全独立的资源控制

避免"吵闹邻居"问题(一个PDB影响其他PDB)

在实际应用中,Oracle推荐使用CDB架构,特别是在12c及以后版本中,这是Oracle多租户战略的核心组成部分。


网站公告

今日签到

点亮在社区的每一天
去签到