remote_login_passwordfile必须设为exclusive才能支持远程密码认证;需配合orapwd生成正确路径权限的密码文件,并确保sqlnet.ora中sqlnet.authentication_services配置合理(windows为nts、linux为all),三者缺一不可。

remote_login_passwordfile 必须设为 EXCLUSIVE
远程用 sqlplus sys/password@tns as sysdba 登录失败,90% 是因为这个参数没开。它默认可能是 SHARED 或 NONE,而只有 EXCLUSIVE 才允许密码文件识别非 SYS 用户、支持远程密码认证。
执行前确认当前值:show parameter remote_login_passwordfile
如果返回 SHARED 或空,必须改:
alter system set remote_login_passwordfile='EXCLUSIVE' scope=spfile;- 改完必须重启数据库(
shutdown immediate→startup),这是静态参数,不重启无效 - 重启后验证:再次
show parameter remote_login_passwordfile,确保显示EXCLUSIVE
orapwd 命令必须带全 file 和 password 参数
Windows 下运行 orapwd 却提示 OPW-00001 或静默退出?大概率是漏了 file= 或 password= ——这两个是强制参数,缺一不可。
Linux 示例(路径和文件名必须严格匹配规则):orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=MyPass123 entries=10
Windows 示例(注意路径含空格会失败,且文件名必须是 PWD%ORACLE_SID%.ora):orapwd file=%ORACLE_HOME%\database\PWDORCL.ora password=MyPass123 entries=10
-
file路径必须可写:Windows 下需以管理员身份运行 CMD;Linux 下需 oracle 用户权限 -
password值只设 SYS 的初始口令,后续可用ALTER USER sys IDENTIFIED BY ...修改 -
entries不是“用户数”,而是能存多少个具有SYSDBA/SYSOPER权限的账户(一个用户占 1 条,不管同时有几种权限) - 漏掉
force=y时,若原文件存在会报 OPW-00002;但 Windows 下文件锁常导致force=y失效,更稳做法是先手动重命名旧PWD*.ora文件
v$pwfile_users 能验证密码文件是否生效
执行完 orapwd 并重启库后,别急着远程连——先本地登录查视图确认密码文件已加载:
sqlplus / as sysdbaselect * from v$pwfile_users;
正常应看到至少一行:SYS TRUE TRUE FALSE
- 如果结果为空或报错
ORA-00942: table or view does not exist,说明密码文件未被识别(路径错、文件名错、或remote_login_passwordfile没生效) - 如果只显示
SYS,但你想让scott也能as sysdba,得显式授权:grant sysdba to scott;——这步会自动写入密码文件 - 授权后再次查
v$pwfile_users,scott行的SYSDB列应为TRUE
远程连接失败时优先检查 sqlnet.ora 认证开关
即使密码文件和参数都对,远程仍报 ORA-01031: insufficient privileges,很可能是 sqlnet.ora 关闭了密码认证。
检查 $ORACLE_HOME/network/admin/sqlnet.ora 中这一行:SQLNET.AUTHENTICATION_SERVICES = (NTS)(Windows)或 (ALL)(Linux)
- Windows 下若设为
(NONE),会强制走 Windows 集成认证,跳过密码文件,远程必然失败 - Linux 下若设为
(NONE),则完全禁用所有认证方式,连本地/ as sysdba都可能挂掉 - 稳妥做法:Windows 设为
(NTS),Linux 设为(ALL);如不确定,可临时注释掉整行,让 Oracle 回退到默认行为
改完 sqlnet.ora 不需要重启数据库,但客户端需重连或清 TNS 缓存(比如删 $TNS_ADMIN/tnsnames.ora 的缓存文件)。
真正卡住的地方往往不是 orapwd 命令本身,而是三个配置点没对齐:参数文件里的 remote_login_passwordfile、操作系统级的密码文件路径与命名、网络层的 sqlnet.ora 开关。少一个,远程 as sysdba 就进不来。











