禁用 password_verify_function 是最直接解法,因 dbca 阶段校验严格且静默不可调,须在 runinstaller 前通过空实例执行 alter profile default limit password_verify_function null。

响应文件里填了密码,dbca却说“password verification function is enabled”
不是密码没生效,而是 Oracle 在 dbca 阶段调用了 PASSWORD_VERIFY_FUNCTION 做校验,而该函数默认启用且规则严格——哪怕你填的是 oracle.install.db.config.starterdb.password.ALL=MyP@ssw0rd123,只要函数开着,它就会检查长度、大小写、数字、特殊字符、是否含用户名、是否在字典里等,静默模式下无法绕过。
为什么禁用 PASSWORD_VERIFY_FUNCTION 是最直接解法
因为这个校验发生在数据库创建(dbca)阶段,不是 runInstaller 阶段,日志分散在 $ORACLE_BASE/cfgtoollogs/dbca/ 下,容易误判为响应文件参数错误。官方明确建议:自动化部署中应提前禁用该函数,把复杂度交给上层流程控制。
- 必须在
runInstaller -silent之前执行,且目标实例尚未创建(即还没运行 dbca) - 可用空实例连接:
sqlplus / as sysdba→startup nomount→ 执行ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION NULL; - 若连空实例都起不来(如监听未配),可临时改响应文件:加
oracle.install.db.config.starterdb.enableRecovery=false减轻初始化负担
别试图靠“凑密码”绕过验证函数
常见误区是反复修改响应文件里的密码字段,比如加长、换字符类型。但 ORA12C_VERIFY_FUNCTION 还会检查连续字符(如 abc123)、重复字符、与用户名相似度、历史密码重用等,这些在静默安装中不可控、不可调试。
- 响应文件中
password.ALL只用于初始化账号,不参与函数校验逻辑 - 函数校验的是你传给 dbca 的
SYS、SYSTEM等具体账号密码,不是通用密码字段 - 即使所有密码字段都填满,只要
PASSWORD_VERIFY_FUNCTION没关,dbca 就会失败并报ORA-28030
ORACLE_HOME 路径和响应文件参数错位也会导致密码“看似失效”
某些情况下,INS-32056 或 INS-32138 报错会掩盖真实问题:如果 ORACLE_HOME 路径末尾多斜杠、含空格、是软链接,或 UNIX_GROUP_NAME 大小写错误(如写成 OINSTALL),runInstaller 可能根本没正确加载响应文件,后续 dbca 拿到的其实是默认空密码或乱码,再强的密码也无效。
-
ORACLE_HOME必须是绝对路径,层级建议 ≤4,末尾不能有/ -
UNIX_GROUP_NAME=oinstall大小写敏感,填错会导致权限校验失败,进而使 dbca 无法读取响应内容 - 响应文件路径本身不能含中文、空格,且需用
chmod 600保证 oracle 用户可读











