ORA-28001在Grid用户场景下根本原因是ASM密码文件中grid用户凭证过期或缺失,需在各RAC节点停ASM、用orapwd重建含sysasm权限的密码文件并重启ASM,而非执行ALTER USER;环境变量、OCR同步及时间同步亦须检查。
Grid用户密码过期会导致ASM实例无法启动或asmcmd报ORA-28001
oracle 19c rac中,grid用户(即oracle grid infrastructure安装所有者)若密码过期,会直接影响asm实例状态和集群资源管理。典型现象包括:crsctl check cluster失败、asmcmd连接报ora-28001: the password has expired、srvctl start asm卡住或报错。这不是普通数据库用户的过期问题——grid用户默认使用os_authent_prefix(通常是ops$)+操作系统认证,但其sysasm权限实际依赖数据库层面的密码验证(尤其在非os认证模式或启用了密码文件时)。一旦过期,即使能ssh登录服务器,asmcmd也无法执行任何命令。
不能用ALTER USER grid IDENTIFIED BY ...直接改密码
Grid用户是Oracle Clusterware核心账户,其密码策略由GRID_HOME下的Oracle ASM实例(而非CDB/PDB)控制,且该用户通常被锁定(ACCOUNT_STATUS = 'LOCKED'),不走常规dba_users路径。直接连ASM实例执行ALTER USER grid ...会报ORA-01918: user 'grid' does not exist或权限不足错误。真正起作用的是ASM实例的密码文件(orapw+ASM)及其关联的sysasm凭证。
- 确认当前ASM实例是否运行:
crsctl stat res -t | grep asm - 检查密码文件是否存在:
ls -l $GRID_HOME/dbs/orapw+ASM(RAC中每个节点独立存在) - 查看
grid用户在ASM中的状态(需先用sysasm登录):sqlplus / as sysasm→SELECT username, account_status FROM v$pwfile_users WHERE username = 'GRID';
正确做法:用orapwd重建ASM密码文件并重置sysasm密码
必须在每个RAC节点上单独操作,且需停掉本地ASM实例(不影响其他节点)。关键点在于:新密码文件必须包含sysasm权限,并显式指定grid用户为sysasm角色成员。步骤如下:
- 停止本节点ASM:
srvctl stop asm -n $(hostname) - 备份原密码文件:
cp $GRID_HOME/dbs/orapw+ASM $GRID_HOME/dbs/orapw+ASM.bak.$(date +%Y%m%d) - 生成新密码文件(注意
force=y覆盖,format=12.2兼容19c,sysasm=y启用sysasm权限):orapwd file=$GRID_HOME/dbs/orapw+ASM password=新密码 entries=10 force=y format=12.2 sysasm=y - 重启本节点ASM:
srvctl start asm -n $(hostname) - 验证:
asmcmd -p→lsdg应正常返回;或sqlplus / as sysasm→SELECT 1 FROM dual;
如果集群启用了Flex ASM或使用了OCR密码文件(+OCR/orapwASM),还需同步更新OCR中的密码文件副本,用ocrconfig -replace ocrpwfile +OCR/orapwASM(需先上传新文件到ASM磁盘组)。
修改后asmcmd仍连不上?检查环境变量和连接方式
即使密码文件更新成功,asmcmd仍可能因环境配置失效。常见原因有:
-
ORACLE_HOME指向数据库HOME而非GRID_HOME:执行前确认echo $ORACLE_HOME输出是/u01/app/19.0.0/grid类路径 - 未设置
ORACLE_SID为+ASM(单实例ASM)或未用srvctl上下文:RAC中推荐用srvctl setenv asm -t "ORACLE_SID=+ASM"统一环境 - 使用了错误的连接字符串:
asmcmd默认尝试/ as sysasm,若系统启用了密码文件且remote_login_passwordfile=EXCLUSIVE,则必须确保密码文件已加载且grid用户被正确识别 - 节点间时间不同步:RAC对时间敏感,
ntpq -p检查各节点NTP状态,偏差超过20秒可能导致认证失败
最易被忽略的是:密码文件更新后,必须重启本节点ASM实例才能加载新凭证;而RAC中节点间ASM密码文件不同步,会导致部分节点asmcmd可用、部分不可用——务必逐节点验证。


















