srvctl 不支持修改 ASM 密码文件路径,因其由 Oracle Clusterware 管理;真实路径由 remote_login_passwordfile 参数和 OCR 启动配置共同决定,需通过 orapwd 重建并确保磁盘组已挂载。
srvctl 修改 ASM 密码文件路径会失败?先确认是否在集群模式下操作
asm 密码文件位置由 oracle clusterware 管理,srvctl 本身不支持直接修改密码文件路径。你执行类似 srvctl modify asm -p /new/path/orapw+asm 会报错 prcr-1076 : failed to modify resource ora.asm 或提示参数不被接受——这不是命令写错了,是功能压根不存在。
真实路径由 +ASM 实例的 remote_login_passwordfile 参数和 OCR 中存储的启动配置共同决定,srvctl 只能改启动选项(如 -n 节点名、-o Oracle Home),不能动密码文件物理位置。
- 密码文件必须放在 ASM 磁盘组中(如
+DATA),且文件名固定为orapw<asm_instance_name>(通常是orapw+ASM) - OCR 中记录的是 ASM 实例的启动命令行,其中隐含了密码文件从哪个磁盘组加载,这个逻辑由 Oracle 自动推导,不可手动指定路径
- 想“换位置”,本质是让 ASM 实例从另一个磁盘组读取密码文件,这需要重建密码文件并确保 ASM 实例重启时能访问新位置
orapwd 创建共享密码文件时,必须加 ignorecase=y 且指定 asm=y
普通数据库用 orapwd 生成密码文件,但 ASM 共享密码文件有特殊要求:不加 ignorecase=y 会导致节点间认证失败;不加 asm=y 会生成不兼容格式,ASM 实例启动时报 ORA-15170: cannot locate password file 或静默忽略。
正确命令示例:
orapwd file='+DATA/orapw+ASM' asm=y force=y ignorecase=y
-
file必须是 ASM URL 格式(+DG_NAME/filename),不能是本地路径 -
force=y是必须的,否则目标已存在时会拒绝覆盖——而 ASM 密码文件通常需要轮换更新 -
ignorecase=y让密码校验不区分大小写,这是 RAC 环境下多节点一致性的硬性要求;设为n会导致部分节点无法用相同密码登录 - 不指定
syspassword参数时,密码沿用当前sys用户密码;若需重置,必须显式给出且所有节点保持一致
ASM 实例无法识别新密码文件?检查磁盘组状态和权限继承
即使 orapwd 成功执行,ASM 实例仍可能报 ORA-15170 或登录时提示 ORA-01017: invalid username/password。常见原因不是文件没生成,而是磁盘组未挂载、或文件权限未被 ASM 进程继承。
- 运行
crsctl stat res -t | grep asm确认ora.asm资源 ONLINE,再查对应磁盘组是否MOUNTED(用asmcmd lsdg) - 密码文件必须建在至少一个已 MOUNTED 的磁盘组中;如果建在
+RECO但该 DG 在某节点未挂载,该节点 ASM 就找不到文件 - ASM 进程以
grid用户运行,它依赖磁盘组的 UMask 和 ASM 实例的_asm_file_permissions隐含参数控制文件权限;不要手动chmodASM 中的文件——它会被忽略 - 验证是否生效:用
sqlplus / as sysasm登录后执行SELECT * FROM v$pwfile_users;,若返回空或只有SYS且ISDBA=TRUE缺失,说明密码文件未被加载
跨版本升级或打补丁后密码文件失效?优先重建而非迁移
Oracle 19c 后对 ASM 密码文件签名和校验更严格,升级 GI 或打 RU 补丁后,旧密码文件可能出现 ORA-15183: ASMLIB initialization error 类间接报错,或 sqlplus / as sysasm 拒绝连接但无明确提示。
- 别尝试拷贝或软链旧文件到新位置——ASM 不识别文件系统级链接,也不校验文件时间戳
- 统一做法:停所有 ASM 实例(
srvctl stop asm -f),用新orapwd命令在原磁盘组重建(同名覆盖),再启库 - 重建前不用导出用户列表:
v$pwfile_users只存SYS和ASMSNMP(如果启用),其他用户不能加进 ASM 密码文件 - 注意 GI 版本与 Oracle Home 版本匹配:用 19c 的
orapwd工具生成的文件,12.1 GI 可能无法识别
最常被跳过的一步:重建后没等所有节点都完成 srvctl start asm 就急着连,结果只有一半节点生效。ASM 密码文件是共享的,但每个实例独立加载,必须逐节点确认状态。

















