主库改sys密码后备库连不上是oracle 11g+的明确行为,因密码文件变更不自动同步;必须由主库用orapwd force=y format=12.2生成新文件,scp至备库同名路径(rac需逐节点覆盖),确保权限640、属主oracle:oinstall、remote_login_passwordfile=exclusive,并重启mrp。

主库改了 SYS 密码,备库立刻连不上 —— 这不是配置错了,是 Oracle 11g 及之后版本的明确行为:密码文件变更从不自动同步。必须手动分发,且每个细节都得对上,否则 ORA-16191 或 ORA-01017 会卡死 MRP。
为什么不能只在主库执行 ALTER USER SYS IDENTIFIED BY ...
因为 Data Guard 的日志传输(LGWR/ARCH)依赖密码文件做身份认证,不是靠数据库字典里的用户口令哈希。主库改完 SYS 密码后,其密码文件内容已变;而备库仍用旧文件,导致主库拒绝备库发起的连接请求。你看到的 ORA-16191: primary log shipping client not able to connect to standby 就是这个原因。
关键点:ALTER USER 只更新数据字典,不碰密码文件;只有 ORAPWD 才能生成新密码文件,且必须由主库生成、推送到备库。
ORAPWD 命令必须带的参数和常见错配
主库上运行 ORAPWD 时,漏掉或写错任一参数,生成的文件就无法用于 DG 认证:
-
FORCE=Y:必须指定,否则若原文件存在会报错退出 -
FORMAT=12.2:11g+ 环境硬性要求,低于此值(如11.2)会导致备库识别为单角色模式,SYSBACKUP等角色失效,MRP 启动失败 -
IGNORECASE=N:必须与原密码文件一致(默认为N),否则大小写敏感逻辑错乱,sqlplus / as sysdba都可能被拒 -
ENTRIES=10:虽不影响当前 DG,但建议 ≥10,避免后续加用户时被迫重生成 - 绝对不要用
INPUT_FILE参数“升级”旧文件 —— 它只复制哈希,不转换内部格式,结果仍是无效文件
RAC 备库要逐节点覆盖,不能只传一个再 rsync
RAC 每个节点都有独立的密码文件路径:$ORACLE_HOME/dbs/orapw<sid></sid>。即使所有节点 SID 相同,也必须分别推送,因为:
- 节点间文件路径名含
SID,但实际内容需与主库完全一致(md5sum必须相同) - 漏掉任意节点,该节点重启后无法参与 MRP,甚至引发
ORA-16778(Data Guard 配置不一致) - 若密码文件存于 ASM(如
+DATA/PROD/PASSWORD/pwdprod.256.123456789),必须用ASMCMD cp,不能用scp—— 否则权限和元数据丢失,Grid Infrastructure 层无法识别 - 每个节点确认权限:
ls -l $ORACLE_HOME/dbs/orapw*,应为-rw-r----- oracle:oinstall
同步后仍报 ORA-16191 的三个隐藏检查点
文件拷贝成功 ≠ 问题解决。以下三点常被跳过,却直接决定 MRP 是否能拉起:
- 备库
remote_login_passwordfile参数必须为EXCLUSIVE(RAC 共享 ASM 场景可设SHARED,但所有实例必须统一) - 备库启动前未取消 MRP:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;,否则新文件不会被加载 - 主库密码文件真实路径可能不在
$ORACLE_HOME/dbs/—— 先查:SELECT * FROM v$pwfile_users;+SHOW PARAMETER remote_login_passwordfile;,再确认 ASM 别名或实际路径
最易忽略的是:RAC 环境下,srvctl start database 会校验所有节点的密码文件权限和可读性,而 sqlplus / as sysdba + startup 可能绕过部分检查 —— 所以测试时别只用手工启动验证。











