主库改sys密码后备库连不上,需手动同步密码文件:主库用orapwd force=y format=12.2生成新文件,scp至备库同名路径(rac需逐节点覆盖),确保权限640、属主oracle:oinstall,remote_login_passwordfile=exclusive,再重启mrp。
主库改完sys密码后,备库连不上了怎么办
11g dataguard 中,sys 密码变更不会自动传播到备库,必须手动同步口令文件(orapw$oracle_sid),否则备库启动mrp或尝试连接时会报 ora-16191: primary log shipping client not able to connect to standby 或 ora-01017: invalid username/password。
- 确认主库口令文件位置:
select * from v$pwfile_users;+show parameter remote_login_passwordfile;实际路径通常为$ORACLE_HOME/dbs/orapw$ORACLE_SID或 ASM 路径如+DATA/PROD/PASSWORD/pwdprod.256.123456789 - 停止备库的 MRP 进程:
alter database recover managed standby database cancel; - 用
scp或asmcmd cp将主库口令文件复制到备库对应位置——注意文件名必须与备库的ORACLE_SID严格一致(例如主库 SID=prod,备库 SID=stby,则目标文件名必须是orapwstby) - 若备库是 RAC,需确保所有节点的
$ORACLE_HOME/dbs/下都覆盖了新文件,或统一放在 ASM 中并配置remote_login_passwordfile=shared - 重启备库实例(非必须,但建议执行以确保加载新口令文件)
为什么用 srvctl stop/start 会失败,而 sqlplus startup 可以?
在 11g RAC 环境中,修改口令文件后若未同步到所有节点,或某节点的 orapw$ORACLE_SID 文件权限/属组错误(比如属主不是 oracle、权限不是 640),srvctl 启动时会因 CRS agent 读取失败而中止,但手工 sqlplus / as sysdba + startup 可能绕过部分校验。
- 检查每个节点的口令文件权限:
ls -l $ORACLE_HOME/dbs/orapw*,确保属主是oracle:oinstall,权限为-rw-r----- - 确认 Grid Infrastructure 层是否识别该文件:
crsctl stat res -t | grep ora.$ORACLE_SID,再查对应资源的日志:$GRID_HOME/log/`hostname`/agent/crsd/oraagent_oracle/oraagent_oracle.log,搜索ORA-或password file - RAC 下若口令文件放在 ASM,需保证所有实例都指向同一 ASM 别名,且
remote_login_passwordfile=shared在所有实例生效
备库同步后仍报 ORA-16191 的常见漏点
口令文件复制正确 ≠ 问题解决。11g DG 对 redo transport 用户认证极其敏感,哪怕一个字符差异都会导致传输中断。
中文敏感词/违禁词检测与内容合规性检查工具。支持对小红书(Xiaohongshu)、Douyin(抖音)、WeChat(微信)、Weibo(微博)、Bilibili(哔哩哔哩)、Zhihu(知乎)、Taobao(淘宝)、JD.com(京东)等主流平台的禁用词、限用词及高风险词进行文本扫描与合规性分析。
- 确认主备库
remote_login_passwordfile参数值完全一致(exclusive或shared),且均为scope=spfile持久化 - 检查主库归档日志是否真正传到备库:
select dest_id, status, error from v$archive_dest where dest_id in (1,2);,error非空说明传输层已卡住 - 验证备库能否用新密码直连:
sqlplus sys/<new_password>@stby as sysdba</new_password>—— 如果连不上,说明口令文件没生效或密码输错 - 不要忽略备库监听状态:
lsnrctl status,确保监听器运行且服务名注册正常,否则tnsping stby通但连接仍失败
11g RAC 主库改密码后,各节点口令文件不一致怎么办
11g 不支持 ASM 共享口令文件自动同步,RAC 主库每个节点都有独立的 orapw$ORACLE_SID 文件。直接在节点1执行 alter user sys identified by ...,只更新该节点文件,其他节点仍用旧密码。
- 必须在每个 RAC 节点上单独执行:
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=<new_pwd> entries=10 force=y</new_pwd> - 或者:先在节点1生成新文件,再用
scp覆盖其他节点的同名文件(路径、权限、属组全一致) - 切勿依赖
ALTER USER命令跨节点生效——它在 11g 中仅作用于当前实例的内存和本地文件 - 验证方式:分别在各节点执行
sqlplus / as sysdba,然后connect sys/<new_pwd> as sysdba</new_pwd>,任一节点失败即说明未同步完成
真实环境里最容易被跳过的,是 RAC 备库节点间口令文件的一致性检查,以及 remote_login_passwordfile 参数在 spfile 和内存中的双重确认。改完密码后,别只测主库,务必在每个备库节点上跑一遍 sqlplus sys/<pwd>@<tns_alias> as sysdba</tns_alias></pwd>。










