主库修改sys密码后备库报ora-16191,根源是密码文件未字节级同步:必须用orapwd重建(force=y、format=12.2、dbuniquename显式指定、ignorecase一致),文件名严格匹配实例名,rac各节点单独部署,asm环境用asmcmd pwcopy,权限设为640且remote_login_passwordfile=exclusive,最后通过orapwd describe和md5sum双重验证。

主库改了SYS密码,备库立刻报ORA-16191,不是网络或参数问题,就是密码文件不一致——必须字节级同步,不能只改密码、不能只拷文件名、不能漏节点。
orapwd重建时哪些参数绝对不能错
用orapwd重生成主库密码文件是第一步,但输错一个参数,备库就认不出新密码:
-
FORCE=Y必须加,否则orapwd拒绝覆盖已有文件 -
FORMAT=12.2是硬性要求(12c+环境),低于此值会导致备库无法识别SYSBACKUP等角色,MRP启动失败 -
DBUNIQUENAME在12c DG切换后必须显式指定(如新备库SID为stby,就得写dbuniquename='stby'),否则文件内嵌的DB_UNIQUE_NAME仍是旧值,RFS进程校验失败 -
IGNORECASE必须和原文件一致(通常为N),否则大小写敏感逻辑错乱,sqlplus / as sysdba都连不上 - 别用
INPUT_FILE试图“升级”旧文件——它只复制哈希,不处理内部格式变更,结果仍是无效文件
备库文件名和路径必须严格匹配实例名
主库生成的orapwORCL不能直接扔到备库$ORACLE_HOME/dbs/下就完事:
- 先查备库真实实例名:
SELECT INSTANCE_NAME FROM V$INSTANCE;,文件名必须是orapw<instance_name></instance_name>(大小写敏感) - RAC备库每个节点都要单独处理:
scp orapwstby node2:$ORACLE_HOME/dbs/、scp orapwstby node3:$ORACLE_HOME/dbs/,漏一个节点,该节点MRP就起不来 - 如果备库密码文件在ASM中(如
+DATA/STBY/PASSWORD/pwdSTBY.256.123456789),不能scp,得用asmcmd pwcopy上传,否则元数据丢失 - 覆盖前先备份:
mv orapwstby orapwstby.bak,避免误操作锁死实例
权限、参数、验证三步缺一不可
文件拷过去只是开始,没做完这三步,照样ORA-16191:
- 属主和权限必须是
oracle:oinstall+640:chown oracle:oinstall $ORACLE_HOME/dbs/orapwstby && chmod 640 $ORACLE_HOME/dbs/orapwstby -
remote_login_passwordfile必须为EXCLUSIVE且持久化:ALTER SYSTEM SET remote_login_passwordfile=EXCLUSIVE SCOPE=SPFILE;(RAC要加SID='*') - 验证是否真同步:在主备库分别执行
orapwd describe file=$ORACLE_HOME/dbs/orapw<sid></sid>,比对输出中SYS行的SYSDBA列是否都为TRUE;再跑md5sum $ORACLE_HOME/dbs/orapw<sid></sid>确认字节级一致
最常被忽略的是RAC节点间文件一致性——哪怕只有一个节点的orapw<sid></sid>没更新或权限不对,CRS agent启动实例时就会静默失败,而手工sqlplus / as sysdba可能侥幸成功,导致问题排查绕远路。











