不能找回明文密码,Oracle仅存储密码哈希值;重置SYS/SYSTEM密码需先通过sqlplus / as sysdba本地免密登录后执行ALTER USER命令,若无法登录则须用orapwd重建密码文件并重启实例。
能找回明文密码?不能。oracle 不存储明文密码,所有用户(包括 sys)的密码都以哈希形式保存在数据字典或密码文件中,无法逆向还原。所谓“找回”,实际是重置——你只能设一个新密码,而不是看到旧密码。
用 sqlplus / as sysdba 免密登录后直接改密码
这是最常用、最快捷的方式,但前提是:你必须在数据库服务端本地操作,且当前操作系统用户属于 Oracle 的 dba 组(Linux/Unix)或属于 Windows 的 ORA_DBA 组。
- 打开终端或 CMD,执行
sqlplus /nolog - 输入
conn / as sysdba—— 这步不输密码,走的是操作系统认证,不是数据库认证 - 执行
ALTER USER sys IDENTIFIED BY <new_password>;</new_password>,比如ALTER USER sys IDENTIFIED BY MyPass123#; - 立刻再试一次
sqlplus sys/MyPass123# as sysdba验证是否生效
注意:conn / as sysdba 失败?说明你的 OS 用户没权限,不是密码问题——得先检查组成员身份或 Windows 上是否以管理员身份运行 CMD。
orapwd 覆盖重建密码文件(仅影响 SYS)
这个命令只重置 SYS 密码,且只在密码文件启用时才起作用(REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE)。它不修改数据库里的哈希值,而是替换整个密码文件。
-
orapwd必须带全file和password参数,漏一个就报OPW-00001: invalid argument - Windows 下务必右键 CMD → “以管理员身份运行”,否则写入
%ORACLE_HOME%\database\PWD<sid>.ora</sid>会失败 - 路径含空格或中文?命令会静默失败——一律用纯英文路径,比如
file=D:\oracle\product\11.2.0\dbhome_1\database\PWDorcl.ora - 加
force=y不一定可靠,尤其服务正在运行时;更稳妥的是先手动重命名旧文件(如PWDorcl.ora.bak),再执行orapwd file=... password=... - 改完必须重启实例——密码文件只在实例启动时加载,不重启等于没改
ALTER USER system IDENTIFIED BY ... 为什么不能直接改 SYS?
可以改,但很多人误以为 ALTER USER sys 无效,其实是执行环境错了:
- SYS 密码受双重机制保护:既存在数据字典(
sys.user$表),也受密码文件约束(当启用远程sysdba登录时) - 用
conn / as sysdba改sys是有效的,因为此时你绕过了密码校验,直接拥有最高权限 - 但如果你用其他 DBA 用户(比如 SYSTEM)去执行
ALTER USER sys,会被拒绝:ORA-01031: insufficient privileges —— SYSTEM 没权限改 SYS - SYSTEM 用户本身不依赖密码文件,所以
ALTER USER system改完立即生效,无需重启,也不需要orapwd
真正容易被忽略的点是:改完 SYS 密码后,别忘了同步更新应用连接字符串、监听配置、备份脚本里硬编码的 sys/xxx as sysdba——这些地方一旦漏掉,后续自动化任务就会静默失败。


















