ora-01031报错主因是密码文件缺失、remote_login_passwordfile参数为none或windows下sqlnet.authentication_services配置失效;须依次验证sqlplus / as sysdba、检查orapw$oracle_sid存在性及大小写、确认参数值为exclusive/shared,并在必要时用orapwd重建密码文件。

ORA-01031 报错时,先确认密码文件是否真丢失
报 ORA-01031: insufficient privileges 并不等于密码文件一定没了——它只是说明 sqlplus / as sysdba 这条链断了。真实原因可能是三者之一:orapw$ORACLE_SID 文件不存在、remote_login_passwordfile 参数设为 NONE、或 Windows 下 SQLNET.AUTHENTICATION_SERVICES 配置失效。
实操建议:
- 执行
sqlplus / as sysdba,若失败,立刻查$ORACLE_HOME/dbs/orapw$ORACLE_SID是否存在(注意大小写,orapwcdb1≠orapwCDB1) - 运行
show parameter remote_login_passwordfile,输出必须是EXCLUSIVE或SHARED;若为NONE,需先用alter system set remote_login_passwordfile=EXCLUSIVE scope=spfile修改并重启 - Windows 环境下必须检查
$ORACLE_HOME/network/admin/sqlnet.ora是否含SQLNET.AUTHENTICATION_SERVICES=(NTS),拼写错误、小写(nts)、或被注释都会导致认证静默失败
重建密码文件必须用 orapwd,不能拷贝或重命名
密码文件不是普通二进制文件,它内嵌实例标识($ORACLE_SID)、版本信息和哈希密钥。跨实例复制、改名、或从旧备份里拖一个过来,轻则触发 ORA-12641: Authentication service failed to initialize,重则让 connect / as sysdba 偶尔成功偶尔失败,极难排查。
实操建议:
- 停库:单机执行
shutdown immediate;RAC 执行srvctl stop database -d <db_unique_name></db_unique_name> - 重建命令示例:
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=<new_sys_password> format=12.2 force=y</new_sys_password>(format=12.2适配 19c/21c;force=y覆盖旧文件) - RAC 环境额外动作:用
asmcmd pwcopy将新文件同步到 ASM,并确保各节点的$ORACLE_HOME/dbs/orapw$ORACLE_SID是软链接指向该 ASM 路径
监听配置损坏常表现为 TNS-12541 或 TNS-00511
监听器本身不依赖密码文件,但它转发的连接请求最终要落到 sqlplus / as sysdba 上。如果监听配置错(比如 listener.ora 中 HOST 写成 localhost 而非实际主机名),会导致远程连接直接超时,掩盖底层密码文件问题。
实操建议:
- 本地验证优先:在数据库服务器上跑
sqlplus / as sysdba和lsnrctl status,两者都通才说明监听层无硬伤 - 检查
$ORACLE_HOME/network/admin/listener.ora中的HOST值是否与hostname输出一致;若用 VIP 或 SCAN,确认 DNS 解析正常(nslookup <scan_name></scan_name>) - 监听日志路径默认为
$ORACLE_HOME/network/log/listener.log,搜索最近的TNS-错误码,比盲目重启更高效
RMAN connect target / 失败本质是认证链断裂
rman connect target / 不是独立流程,它等价于后台调用 sqlplus / as sysdba。所以只要 sqlplus / as sysdba 过不去,RMAN 就卡死在第一步,后续所有 restore、recover 都没机会执行。
实操建议:
- 别跳过基础验证:修复前务必先跑通
sqlplus / as sysdba → show user返回SYS,再试rman target / - Linux/Unix 下无需 NTS,但若误加了
SQLNET.AUTHENTICATION_SERVICES=(NTS),反而会干扰 OS 认证,导致本该成功的connect /报错 - 若使用 Oracle Wallet 或外部身份存储(如 LDAP),密码文件仍需存在且有效——Wallet 只接管用户密码,SYSDBA 权限校验仍走口令文件
remote_login_passwordfile 参数值、文件权限(640,属主 oracle:oinstall)、以及 Windows 下的 sqlnet.ora 配置三者必须全部对齐,缺一不可。任一环节松动,都会让 RMAN 在最前端就失去立足点。











