必须在CREATE DATABASE时指定ENABLE PLUGGABLE DATABASE才能创建CDB,该子句不可后续修改;init.ora中enable_pluggable_database=TRUE仅允许语法通过,不自动创建CDB。

必须在实例启动前就决定是否启用CDB,靠后续ALTER DATABASE改不了——ENABLE PLUGGABLE DATABASE 是 CREATE DATABASE 语句的硬性子句,不是运行时可调参数。
CREATE DATABASE 语句里漏掉 ENABLE PLUGGABLE DATABASE 就是普通非CDB
很多人以为只要参数文件里写了 enable_pluggable_database=TRUE,建出来的就是 CDB。错。这个参数只影响 CREATE DATABASE 是否允许带 ENABLE PLUGGABLE DATABASE 子句,它本身不创建 CDB。
- CREATE DATABASE 不带该子句 → 建出来是 非CDB,哪怕参数文件有
enable_pluggable_database=TRUE也无效 - CREATE DATABASE 带
ENABLE PLUGGABLE DATABASE→ 才真正触发 CDB 初始化流程,自动创建CDB$ROOT和PDB$SEED - 建库语句中还可指定
DEFAULT TABLESPACE、UNDO TABLESPACE等,但ENABLE PLUGGABLE DATABASE必须出现在最后且不能省略逗号分隔
init.ora 里 enable_pluggable_database=TRUE 不等于自动启用CDB
这个参数本质是个“闸门开关”:它只控制 CREATE DATABASE 语句能否合法使用 ENABLE PLUGGABLE DATABASE。如果设为 FALSE,执行带该子句的建库语句会直接报 ORA-65086。
-
enable_pluggable_database=FALSE(默认值)→ 即使你手写ENABLE PLUGGABLE DATABASE,也会在解析阶段被拒绝 -
enable_pluggable_database=TRUE→ 允许语法通过,但最终是否建成 CDB,仍取决于你有没有真正在 CREATE DATABASE 里写上它 - 该参数不影响已存在数据库的类型,也不能把非CDB在线转成CDB(19c 不支持)
DBCA 静默安装时 CREATE_AS_CDB=YES 才真正起效
用 DBCA 静默模式建库时,CREATE_AS_CDB=YES 是关键开关;但它背后仍是生成一条带 ENABLE PLUGGABLE DATABASE 的 CREATE DATABASE 语句。如果响应文件里漏了这行,或写成 NO,哪怕 Oracle Home 是 19c,建出来的仍是非CDB。
-
CREATE_AS_CDB=YES→ DBCA 自动生成含ENABLE PLUGGABLE DATABASE的建库脚本 -
NUM_PDBS=2等参数仅在CREATE_AS_CDB=YES下生效,否则被忽略 - 静默安装日志里搜
CREATE DATABASE.*ENABLE PLUGGABLE DATABASE可确认是否真走了 CDB 路径
最易被忽略的一点:CDB 的“容器性”从第一个数据文件写入那一刻就固化了。建库后查 v$database.cdb 是 YES,不代表你就能随意切换架构——Oracle 19c 不提供非CDB → CDB 的升级路径,只能重建。所以动手前务必确认建库语句和参数文件同步对齐。


















