能改,但必须分清场景:连得上数据库就用ALTER USER;连不上就得重建密码文件。ALTER USER改SYS需以字母开头、非全数字;orapwd重建时必须指定file和password参数,并重启实例验证。

能改,但必须分清场景:连得上数据库就用 ALTER USER;连不上(比如 conn / as sysdba 都报 ORA-01031: insufficient privileges)就得重建密码文件。别指望“改密码”能绕过认证机制。
连得上时:用 ALTER USER 直接改,但注意角色和密码格式
只要还能本地以 / as sysdba 登录(即 oracle 用户或 Windows 管理员身份运行终端),就走这条最简路径:
-
ALTER USER sys IDENTIFIED BY newpass;—— 新密码必须以字母开头,不能全数字,否则触发ORA-00988 -
ALTER USER system IDENTIFIED BY newpass;—— 同样受密码策略约束,可通过SELECT * FROM dba_profiles WHERE profile='DEFAULT' AND resource_name='PASSWORD_VERIFY_FUNCTION';查看是否启用了强密码校验 - 改完
SYS后,下次登录必须显式带as sysdba,例如sqlplus sys/newpass as sysdba;只写sqlplus sys/newpass会降级为普通用户认证,必然报ORA-01017 -
SYSTEM没这个限制,改完即可直接conn system/newpass
连不上时:orapwd 不是“改密码”,是覆盖生成新密码文件
当 conn / as sysdba 失败,说明操作系统认证失效或密码文件损坏,此时必须重建密码文件。关键点不是“怎么输命令”,而是“哪些参数漏不得”:
- 必须指定
file=,路径要完整且无空格/中文,例如 Linux 下:orapwd file=$ORACLE_HOME/dbs/orapworcl password=mypass;Windows 下:orapwd file=%ORACLE_HOME%\database\PWDorcl.ora password=mypass - 必须指定
password=,该值仅设为SYS用户的新口令,SYSTEM密码不受影响 - 不要依赖
force=y:Windows 下常因文件锁导致静默失败;稳妥做法是先手动重命名原PWD*.ora文件,再执行orapwd - 漏掉
file或password,会报OPW-00001: invalid argument或直接退出不提示——没报错 ≠ 成功
Windows 下 orapwd 失败的典型原因:权限和路径
在 Windows 上,orapwd 默认写入 %ORACLE_HOME%\database\,该目录受系统保护。普通 CMD 启动会失败,表现为:
- 卡在“拒绝访问”,或生成 0 字节的
PWD*.ora - 即使提示“命令成功”,检查文件大小仍是 0,修改时间也未更新
- 正确做法:右键“命令提示符” → “以管理员身份运行”,再执行
- 验证是否真成功:检查目标路径下
PWD*.ora文件大小是否 > 0,且修改时间是否为当前时刻
改完仍连不上?大概率是忘了重启实例或输错角色名
这不是命令问题,而是环境动作被跳过:
- 执行完
orapwd后,必须重启 Oracle 实例(Windows 下是OracleService<SID>服务,Linux 下是srvctl stop/start database或手工shutdown immediate+startup),否则旧密码文件仍在内存中 - 登录时写成
sqlplus sys/mypass as sys dba(中间多空格)或as sysdba拼错为as sysdb,都会导致认证降级,报ORA-01017 -
SYS密码改的是密码文件里的入口,而SYSTEM密码存在数据字典里,二者存储位置不同,别误以为改一个就能通吃
真正容易被忽略的点是:密码文件只管 SYS 的远程/非OS认证,而 SYSTEM 永远不进密码文件;所有“改完登不上”的案例,八成卡在没重启服务,或 Windows 下没用管理员 CMD 执行 orapwd。


















