先用sqlplus / as sysdba本地无密直连,再执行ALTER USER username IDENTIFIED BY "新密码" ACCOUNT UNLOCK重置密码并解锁;若需永久避免过期,再运行ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED。
密码过期后无法登录,但你仍有 sys 或其他具备 sysdba 权限的账户可用,就能直接在 sql*plus 里重置——不需要停库、不依赖外部工具,关键在于先连得上、再改得准。
用 / as sysdba 绕过密码验证直连数据库
这是整个操作的前提。Oracle 允许操作系统认证用户(如 Windows 的管理员、Linux 的 oracle 用户)以 sysdba 身份无密码连接,只要数据库服务正在运行且本地登录即可:
- 确保你在数据库服务器本机操作(远程 SSH 或 RDP 进去),不是从客户端机器连
- 命令行执行
sqlplus / as sysdba,回车后若显示Connected to:就成功了 - 如果报错
ORA-01031: insufficient privileges,说明当前 OS 用户没被加入dba组(Linux/Unix)或没以管理员身份运行 CMD(Windows) - 不要输
sqlplus sys as sysdba然后卡在密码提示——那是在要求你输入旧密码,而它已经过期或记不得了
ALTER USER ... IDENTIFIED BY 必须配合 ACCOUNT UNLOCK
密码过期常伴随账户锁定(ACCOUNT_STATUS = 'EXPIRED(GRACE)' or 'LOCKED'),只改密码不解锁,下次登录仍会失败:
- 先查状态:
SELECT username, account_status, expiry_date FROM dba_users WHERE username = 'SCOTT'; - 两步必须都执行(顺序无关):
ALTER USER scott ACCOUNT UNLOCK;和ALTER USER scott IDENTIFIED BY "NewPass123!"; - 密码需满足策略:Oracle 11g+ 默认要求含大小写字母、数字、特殊字符,长度 ≥8;若报
ORA-28003: password verification failed,就换一个合规的 - 双引号包裹密码可保留大小写和特殊字符,不加引号时 Oracle 会自动转为大写,导致后续登录失败
避免下次再过期:改掉 PASSWORD_LIFE_TIME 限制
默认配置文件 DEFAULT 的密码有效期是 180 天,2026 年 4 月发布的资料已确认该策略仍在生效。不过改配置不会影响已过期用户,必须先重置密码再改策略:
- 查当前设置:
SELECT limit FROM dba_profiles WHERE profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME'; - 永久禁用:
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; - 该语句立即生效,但对**已过期账户不自动恢复**——必须手动执行一次
ALTER USER ... IDENTIFIED BY才能刷新其状态 - 生产环境慎用
UNLIMITED,更稳妥的是设为365或配合定期轮换机制
最易忽略的一点:改完密码后,别急着让应用立刻切过去。先用 sqlplus username/new_password@tns_alias 手动验证一次——很多问题出在应用配置缓存旧密码、TNS 名称解析失败,或新密码里有未转义的特殊字符(比如 @、/),这些都不会在 SQL*Plus 本地执行时报错,却会让连接字符串解析失败。


















