orapwd命令必须同时指定file和password参数,缺一则静默失败并报opw-00001;路径须为纯英文、无空格,且需重启数据库实例才能生效,同时remote_login_passwordfile参数必须设为exclusive。
orapwd命令必须带file和password参数,漏掉任一参数会静默失败
orapwd不是交互式工具,所有参数必须一次性给全。常见错误是只写orapwd password=abc123,结果什么也不报、文件没生成,实际执行失败了——报错是opw-00001: invalid argument,但很多人没注意控制台输出。必须明确指定file路径,例如file=%oracle_home%\database\pwdorcl.ora(windows)或file=$oracle_home/dbs/orapw$oracle_sid(linux)。路径中含空格或中文会导致解析异常,一律用纯英文路径。
删旧PWD*.ora比加force=y更可靠,尤其在Windows上
Windows下force=y常因文件被Oracle服务占用而失效,表现为命令看似成功但登录仍报ORA-01017。更稳妥的做法是手动操作:
- 先确认SID:查注册表
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb11g_home1下的ORACLE_SID,或看服务名如OracleServiceORCL - 定位原文件:
%ORACLE_HOME%\database\PWD<sid>.ora</sid>,比如PWDorcl.ora - 重命名备份:
ren PWDorcl.ora PWDorcl.ora.bak - 再执行
orapwd file=PWDorcl.ora password=newpass123
改完密码文件必须重启数据库实例,否则不生效
Oracle在实例启动时加载密码文件,运行中修改文件内容或替换文件,都不会被自动识别。常见误操作是执行完orapwd就立刻sqlplus sys/newpass as sysdba,结果还是报ORA-01017。必须:
- 停止服务:
net stop OracleServiceORCL(Windows)或srvctl stop instance -i orcl -d orcl(RAC) - 启动服务:
net start OracleServiceORCL - 验证是否加载成功:登录后查
SELECT * FROM v$pwfile_users;,应有SYS且sysdba列为TRUE
sqlplus sys/<newpwd> as sysdba</newpwd>必须带as sysdba,不能省略或写错格式
SYS用户强制走角色认证,只输sqlplus sys/<newpwd></newpwd>必然报ORA-01017。正确写法只有两种:
-
sqlplus sys/<newpwd> as sysdba</newpwd>(注意as sysdba是完整关键字,不能写成as sys dba或漏空格) - 或分步:
sqlplus /nolog→conn / as sysdba(此时依赖OS认证,不输密码)→ 再conn sys/<newpwd> as sysdba</newpwd>
另外,remote_login_passwordfile参数必须为EXCLUSIVE,否则密码文件被忽略;用SHOW PARAMETER remote_login_passwordfile确认,若为SHARED或NONE,需先执行ALTER SYSTEM SET remote_login_passwordfile='EXCLUSIVE' SCOPE=SPFILE;并重启。











