必须用SYSDBA权限账号(如sys或system)才能解锁账户,普通用户执行ALTER USER...ACCOUNT UNLOCK会因权限不足报错;最常用方式是SQL命令直接解锁,需先查状态再执行ALTER USER SCOTT ACCOUNT UNLOCK,可合并重置密码;若解锁后立即再锁,需检查profile中FAILED_LOGIN_ATTEMPTS限制并调整;图形工具操作需右键用户Properties取消Account Locked勾选;解锁后仍连不上需排查密码过期、后台错误连接及应用配置。
必须用具备 sysdba 权限的账号(如 sys 或 system)才能解锁,普通用户执行 alter user ... account unlock 会报权限不足错误。
这是最常用、最可控的方式,适用于命令行或 PL/SQL Developer、SQL Developer 等工具中操作。
SELECT username, account_status, lock_date FROM dba_users WHERE username = 'SCOTT'; —— 如果 account_status 是 LOCKED 或 EXPIRED & LOCKED,说明已被锁ALTER USER SCOTT ACCOUNT UNLOCK; —— 注意语法中 ACCOUNT UNLOCK 是连写,中间不能加下划线或空格ALTER USER SCOTT IDENTIFIED BY newpass ACCOUNT UNLOCK;
SELECT username, account_status FROM dba_users WHERE username = 'SCOTT'; —— 确保返回 OPEN
账户反复被锁,不是没解锁成功,而是触发机制还在运行。根本原因是 profile 中的登录失败次数限制仍在生效。
SELECT username, profile FROM dba_users WHERE username = 'SCOTT';
SELECT resource_name, limit FROM dba_profiles WHERE profile = 'DEFAULT' AND resource_name = 'FAILED_LOGIN_ATTEMPTS'; —— 默认通常是 10
ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED;
ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS 30;
适合不熟悉 SQL 语句、或需快速定位多个锁定用户的场景,但依赖客户端功能完整性。
sys 或 system 登录后,在左侧对象浏览器展开 Users 节点SCOTT),右键 → Properties(或 Edit)Account Locked(有些版本叫 Locked 或显示为锁图标)Password 输入框,建议一并填新密码并勾选 Change password on first login(尤其对新交付环境)Apply 或 OK —— 部分旧版 PL/SQL Developer 需额外点 Commit 才真正提交ORA-28000 常和 ORA-28001(密码过期)共存,且真实原因往往藏在后台自动连接行为里。
SELECT username, account_status FROM dba_users WHERE username = 'SCOTT'; —— 若返回 EXPIRED & LOCKED,只解锁不够,必须改密码SELECT username, os_username, machine, terminal, timestamp FROM dba_audit_session WHERE returncode != 0 AND username = 'SCOTT' ORDER BY timestamp DESC; —— 看是不是某个 ETL 工具或 DBLink 在后台刷错密码lsnrctl status 输出里的 Listener Parameter File 路径,然后查 listener.log,过滤对应用户名失败记录真正麻烦的从来不是那条 ALTER USER ... ACCOUNT UNLOCK,而是不知道谁、在哪、用什么频率在撞锁。查 dba_audit_session 和 listener.log 比单纯解锁重要得多。