Oracle 21c 强制启用 CDB 模式,安装仅提供 CDB 选项且 CREATE DATABASE 必须带 ENABLE PLUGGABLE DATABASE;单实例安装即创建 CDB+PDB,连接默认进入 CDB$ROOT,业务操作需切换至 PDB。
Oracle 21c 安装时强制要求 CDB 模式的原因
oracle 21c 不再提供“非容器数据库(non-cdb)”安装选项,不是设计疏漏,而是官方从该版本起彻底移除了对 non-cdb 的支持。这意味着:无论你选“桌面类”还是“服务器类”,安装向导里根本不会出现“创建非cdb”的路径;create database 命令若不带 enable pluggable database 子句,会直接报错 ora-65096: invalid common user or role name 或更早阶段失败。
背后的技术动因很实际:Oracle 已将多租户作为统一底座,所有内部管理、补丁机制、备份恢复逻辑(如 RMAN)、甚至 Data Guard 配置都默认按 CDB/PDB 分层建模。保留 non-CDB 会持续增加维护分支成本,而绝大多数生产环境早已迁移到 CDB 架构。
安装界面中“创建并配置单实例数据库”=自动启用 CDB
新手常误以为“单实例”等于“非CDB”,其实完全相反。Oracle 安装程序中的“单实例数据库”选项,在 21c 中专指“一个 CDB 实例 + 至少一个 PDB”——它会自动执行以下动作:
- 初始化
CDB$ROOT根容器,并预置系统数据字典和公共用户(如C##ADMIN) - 默认创建一个名为
ORCLPDB1(或你指定的名称)的可插拔数据库(PDB) - 配置监听器(
listener.ora)同时注册 CDB 和 PDB 的服务名(如orcl和orclpdb) - 生成两个关键连接字符串:
sqlplus / as sysdba连入 CDB 根,sqlplus sys@orclpdb as sysdba连入 PDB
如果你跳过这步、选了“仅安装数据库软件”,后续必须手动运行 dbca -silent -createDatabase ... -enablePluggableDatabase,否则无法启动合法的 21c 数据库实例。
为什么不能绕过 CDB 直接用旧版脚本建库
即使你手写 CREATE DATABASE 语句并省略 ENABLE PLUGGABLE DATABASE,Oracle 21c 内核会在 OPEN 阶段强制校验:只要数据库打开,V$DATABASE.CDB 字段就一定是 YES。尝试用 19c 或更早的建库脚本在 21c 上运行,大概率卡在 ALTER DATABASE OPEN 并抛出 ORA-65137: Pluggable database not enabled。
这不是兼容性开关问题,而是二进制层面的硬编码约束。Oracle 21c 的可执行文件(oracle.exe / oracle)已移除 non-CDB 的初始化路径,相关代码段被彻底删除。
实际连接和开发时容易忽略的 CDB/PDB 切换点
刚装完连上 sqlplus / as sysdba,你以为进了“数据库”,其实只在 CDB$ROOT。此时 SELECT NAME FROM V$PDBS; 能看到 PDB 列表,但 SELECT COUNT(*) FROM USER_TABLES; 几乎为空——因为你在根容器里,没 schema。
真正写业务表、建用户、跑应用,几乎都要切到 PDB:
- 用
ALTER SESSION SET CONTAINER = ORCLPDB1;切换(需先ALTER PLUGGABLE DATABASE ORCLPDB1 OPEN;) - 或直接连接服务名:
sqlplus hr/hr@localhost:1521/orclpdb - PL/SQL Developer 等工具里,“数据库”字段填的是服务名(
orclpdb),不是 SID(orcl)
漏掉这层切换,是新手写完表却查不到数据、授权失败、甚至误在 CDB$ROOT 创建业务用户的最常见原因。


















