安装时勾选“创建 pluggable database”仅触发默认pdb创建,该pdb默认mounted且无业务用户、表空间及服务名注册,需手动open、建对象、配置service_names并验证监听器注册。
安装时勾选“创建 pluggable database”只是让 dbca 在 cdb 初始化完成后,自动执行一次 create pluggable database 命令——它不会改变多租户本质,也不会绕过 cdb/pdb 的层级约束。你依然得在 cdb$root 里建 pdb,在目标 pdb 里建用户和表空间。
安装阶段勾选 PDB 创建 ≠ 自动完成业务库部署
这个选项只触发一个默认 PDB 的创建动作(比如叫 PDB$SEED 派生出的 PDB1),但该 PDB 默认处于 MOUNTED 状态,且不带业务表空间、无业务用户、没开放网络服务名。它只是一个空壳,不能直接交付给应用使用。
-
dbca不会为你设置file_name_convert或db_create_file_dest,路径出错时可能把数据文件写到$ORACLE_HOME/dbs下(非预期位置) - 默认 PDB 使用
USERS表空间,没做数据/索引分离,也不支持后续自动扩容 - 不创建任何业务用户,
ADMIN USER密码由dbca随机生成,不可控、难审计
必须手动补全的 3 个关键操作
安装完后,立刻登录 CDB$ROOT 执行以下检查与补全:
- 确认 PDB 已存在且状态为
MOUNTED:show pdbs;若为NEW或报错,说明创建失败,需查$ORACLE_BASE/cfgtoollogs/dbca/<cdb_name></cdb_name>日志 - 打开 PDB 并设为开机自启:
ALTER PLUGGABLE DATABASE <pdb_name> OPEN READ WRITE;</pdb_name>,再执行ALTER PLUGGABLE DATABASE <pdb_name> SAVE STATE;</pdb_name> - 切换容器并建业务对象:
ALTER SESSION SET CONTAINER = <pdb_name>;</pdb_name>,然后建表空间、用户、授权——这步漏掉,所有对象都会误建在 CDB$ROOT
连接 PDB 时最容易踩的坑:混淆 SID 和 Service Name
即使安装时勾选了 PDB,监听器默认仍只注册 CDB 的服务名(如 ORCLCDB),新 PDB 的服务名(如 ORCLPDB)不会自动广播。直接用 sqlplus user/pass@host:1521/ORCLPDB 会报 ORA-12505。
- 验证服务名是否注册:
lsnrctl status输出中找SERVICE_NAME行,没有就说明没注册成功 - 强制 PDB 向监听器注册:
ALTER SYSTEM REGISTER;(在 CDB$ROOT 下执行) - 或者显式配置静态服务:
alter system set service_names='ORCLCDB,ORCLPDB' scope=both;,再重启监听器 - 别用
ORACLE_SID连 PDB——实例只有一个,SID 是 CDB 的;要用ORACLE_PDB_SID或 TNS 别名
真正麻烦的不是创建那一刻,而是后续权限控制、表空间配额、服务名生命周期管理这些细节。比如 SAVE STATE 在 RAC 环境下不生效,file_name_convert 路径末尾斜杠缺一不可,DEFAULT TABLESPACE 必须在 PDB 内已存在——这些地方一错,整个 PDB 就卡死在 MOUNTED 状态,连 ALTER SESSION SET CONTAINER 都进不去。











