Oracle 12.2.0.1及以上版本支持SYS密码通过redo自动同步至备库,但需满足REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE且备库处于MOUNT/OPEN并正常应用归档;低于12.2版本不支持,同步依赖完整DG链路与正确密码文件格式(FORMAT=12.2)、权限(640)及属主(oracle:oinstall)。

12.2+ 版本是否真能自动同步密码文件
能,但仅限 Oracle 12.2.0.1 及以上版本,且必须满足两个硬性前提:主库使用密码文件认证(REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE),且备库处于 MOUNT 或 OPEN 状态并正常接收归档。低于 12.2 的版本(包括 12.1)完全不支持,强行依赖“自动同步”会导致 ORA-16191 或 ORA-16664。
为什么改了 SYS 密码后备库仍连不上
常见错误是误以为“自动同步 = 立即生效”。实际机制是:主库修改 SYS 密码后,该变更会以特殊 redo 记录形式写入在线日志 → 备库在应用这部分 redo 时,由后台进程(MRP 或 ARCn)触发密码文件更新。这个过程依赖归档传输和应用链路完整,任意一环中断(如 LOG_ARCHIVE_DEST_n 配置错误、网络不通、备库未启 MRP)都会卡住同步。
- 检查点:在备库执行
SELECT NAME, VALUE FROM V$DATAGUARD_STATS WHERE NAME LIKE '%apply%';,确认apply lag为 0 且无停滞 - 验证密码文件是否已更新:对比主备库
$ORACLE_HOME/dbs/orapw$ORACLE_SID文件的修改时间(ls -l),12.2+ 下应基本一致 - 注意 RAC 场景:即使主库是 RAC,密码文件同步也只发生在单个节点生成的密码文件上;若主库多节点各自维护独立密码文件,自动同步可能只覆盖部分节点,需人工校验所有节点哈希值
orapwd 命令参数对自动同步的影响
虽然 12.2+ 支持自动同步,但主库初始生成的密码文件格式仍决定备库能否正确解析后续变更。若主库密码文件是用低版本 orapwd(如未指定 FORMAT=12.2)生成的,备库即使收到 redo 也无法完成内部格式升级,表现为 MRP 日志中反复出现 password file format mismatch。
- 必须显式指定
FORMAT=12.2(或更高,如12.3),不可依赖默认值 -
FORCE=Y是安全操作必需项,否则orapwd在文件存在时直接报错退出 -
IGNORECASE=N必须与原文件一致;若主库旧密码文件是大小写敏感的,新文件设为Y会导致备库认证失败 - 绝对不要用
INPUT_FILE参数试图“升级”旧密码文件——它只会复制哈希,不转换格式,结果仍是无效文件
备库密码文件权限和属主被忽略的后果
自动同步只更新密码文件内容,不触碰文件系统元数据。如果备库 orapw$ORACLE_SID 的属主不是 oracle:oinstall 或权限不是 640,MRP 进程在尝试读取时会静默失败,日志里只显示 cannot open password file,容易误判为同步未发生。
- 每次主库执行
orapwd后,立即在备库执行:chown oracle:oinstall $ORACLE_HOME/dbs/orapw$ORACLE_SID和chmod 640 $ORACLE_HOME/dbs/orapw$ORACLE_SID - RAC 备库要逐节点检查,不能只查一个实例所在节点
- 特别注意:若备库是 ASM 存储,密码文件路径可能为
+DATA/DBNAME/PASSWORD/pwdbasename.256.12345,此时需用asmcmd修改权限,普通chmod无效


















