静默建库必须指定-silent及-createdatabase或-clonetemplate,二者缺一不可;必须提供模板路径或响应文件,且syspassword与systempassword须不同,-createascontainerdatabase true是创建cdb的唯一开关。

静默建库命令必须带 -silent 且至少指定模板或响应文件
不加 -silent 就会弹图形界面,根本不会走静默流程;只写 -silent 不跟任何动作参数(如 -createDatabase 或 -cloneTemplate),DBCA 直接报错退出。常见错误是漏掉 -createDatabase,结果看到 “Invalid command line option” 却找不到原因。
两种主流方式必须二选一:
-
-createDatabase -templateName:直接用 Oracle 自带模板,路径要写全,比如$ORACLE_HOME/assistants/dbca/templates/General_Purpose.dbc -
-cloneTemplate -responseFile:用自定义响应文件,文件必须可读,且其中gdbName、sid、sysPassword等关键项不能空
混合使用时,命令行参数优先级高于响应文件里同名项——这点容易被忽略,改了响应文件却没生效,其实是被命令行覆盖了。
-createAsContainerDatabase TRUE 是创建 CDB 的唯一开关
Oracle 12c 及以后版本,默认建的是非容器库(non-CDB)。想建 CDB,必须显式加这个参数,否则哪怕用了 19c 软件、指定了 General_Purpose.dbc 模板,出来的仍是传统单租户结构。
注意它只控制“是否为容器库”,不决定 PDB 数量或名称。PDB 创建需后续手动执行 CREATE PLUGGABLE DATABASE,或在响应文件中配 sampleSchema=true(仅对部分模板生效)。
常见坑:
- 忘记加该参数,建完才发现
SELECT CDB FROM V$DATABASE返回NO - 在 RAC 环境下漏配
-nodelist和-databaseConfigType rac,导致静默过程卡在节点发现阶段 -
-storageType ASM时未提前挂载磁盘组,DBCA 报ORA-15032: not all alterations performed但日志里藏得深
密码参数不能省,且 sysPassword 和 systemPassword 必须不同
Oracle 12c+ 强制要求 sysPassword 与 systemPassword 不一致,否则建库失败并提示 “Passwords must be different”。这个校验发生在实例启动前,所以日志里可能只看到 “ORA-01017: invalid username/password”,实际是密码规则拦截。
其他密码项(如 dbsnmpPassword、sysmanPassword)若未提供,DBCA 会用默认值或跳过对应组件(如 EM Express),但 sys 和 system 密码是硬性依赖。
安全提醒:
- 别把密码明文写进 shell 历史,建议用
-responseFile配置,再chmod 600保护文件 - 字符集参数
-characterSet若不指定,默认是 AL32UTF8,但若业务需中文支持且环境老旧,得显式设为ZHS16GBK,否则建库后改字符集代价极大
建库日志位置固定,出错第一时间看它
DBCA 静默模式下屏幕只输出一行:Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/<sid>/<sid>.log" for further details.</sid></sid> 这个路径是固定的,<sid></sid> 就是你命令里写的 -sid 值。
别指望 stdout 给你报错详情——进度百分比卡在 60% 或 96%,十有八九是存储权限、监听未启、或 ASM 磁盘组不可写。打开对应日志,搜 ERROR 或 ORA- 才能准确定位。
一个容易被忽略的细节:日志里出现 ORA-00845: MEMORY_TARGET not supported on this system,不是数据库参数问题,而是 Linux 的 /dev/shm 大小不足,得调大再重试。











