ora-01031根本原因是密码文件缺失、损坏或remote_login_passwordfile参数未设为exclusive/shared,导致sysdba认证失败;rman connect target / 依赖该认证链,故连带报错。

RMAN connect target / 报 ORA-01031:密码文件缺失或权限错
直接原因不是RMAN本身出问题,而是Oracle实例启动后无法完成SYSDBA身份校验——orapw$ORACLE_SID文件丢失、损坏,或remote_login_passwordfile参数未启用,导致connect / as sysdba在本地也失败。RMAN依赖这一底层认证链,连不上target,后续所有操作都卡死。
确认密码文件是否真实缺失或不可用
先绕过RMAN,在数据库服务器上用SQL*Plus验证基础认证:
- 执行
sqlplus / as sysdba,若报ORA-01031: insufficient privileges,说明OS认证未生效且密码文件不可用 - 检查
$ORACLE_HOME/dbs/orapw$ORACLE_SID是否存在:ls -l $ORACLE_HOME/dbs/orapw*;注意Linux下大小写敏感,orapwcdb1≠orapwCDB1 - 查当前参数:
show parameter remote_login_passwordfile;值必须是EXCLUSIVE或SHARED,NONE会彻底禁用口令文件认证 - 若使用ASM托管(如RAC),还需确认
SELECT * FROM v$passwordfile_info;返回有效记录,TYPE列应为ASM
重建密码文件的正确方式
不能靠拷贝或重命名已有文件——orapwd生成的密码文件含实例绑定信息,跨实例复用会触发ORA-12641或静默认证失败。必须用orapwd命令原生生成:
- 停掉实例(避免写冲突):
srvctl stop database -d <db_unique_name></db_unique_name>(RAC)或shutdown immediate(单机) - 执行重建:
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=<new_sys_password> format=12.2 force=y</new_sys_password>;format=12.2适配19c,force=y覆盖旧文件 - 重启实例后立即验证:
sqlplus / as sysdba→show user应返回SYS - RAC环境额外步骤:用
asmcmd pwcopy同步到ASM,并确保各节点$ORACLE_HOME/dbs/orapw$ORACLE_SID是软链接指向该ASM路径
Windows下特别注意SQLNET.AUTHENTICATION_SERVICES配置
Linux/Unix系统不依赖NTS认证,但Windows必须显式启用,否则connect / as sysdba永远失败:
- 检查
$ORACLE_HOME/network/admin/sqlnet.ora中是否有SQLNET.AUTHENTICATION_SERVICES=(NTS) - 若该行被注释、设为
(NONE)或拼写错误(如(nts)小写),都会导致ORA-01031 - 修改后无需重启监听,但需重新打开命令行终端(环境变量重载)再试
sqlplus / as sysdba - 切勿在Linux上设
NTS——这会导致所有OS认证失效,且不会报错,只静默拒绝
最易被忽略的是:密码文件重建后,若实例是用SPFILE启动的,remote_login_passwordfile参数可能仍为NONE(尤其从旧备份恢复时)。必须显式执行alter system set remote_login_passwordfile=EXCLUSIVE scope=spfile;并重启,否则新文件形同虚设。











