Oracle DataBaseLink 提示密码过期
当通过 Database Link 查询时,如果遇到 ORA-28001: the password has expired 错误,说明远程数据库上该链接使用的用户密码已经过期。处理思路分三步:远程库重置密码 → 本地库更新链接密码 → 调整策略防止再过期。
1. 在远程数据库重置用户密码
以 DBA 或有 ALTER USER 权限的身份登录远程数据库,确认状态并修改密码:
-- 检查用户状态和密码过期时间
SELECT USERNAME, ACCOUNT_STATUS, EXPIRY_DATE, PROFILE
FROM DBA_USERS
WHERE USERNAME = '远程用户名'; -- 改成实际的 DBLink 用户
-- 修改密码(同时会重置过期时间)
ALTER USER 远程用户名 IDENTIFIED BY "新密码";
-- 如果账户被锁定,一并解锁
ALTER USER 远程用户名 ACCOUNT UNLOCK;
如果因为密码已过期连
SQL*Plus都登不上,先用/ as sysdba登录再操作。
2. 在本地数据库更新 Database Link 的密码
必须同步本地 DBLink 的密码,否则即使远程密码已更新,本地仍会因凭证错误而失败。
-- 私有 DBLink
ALTER DATABASE LINK 链接名
CONNECT TO 远程用户名 IDENTIFIED BY "新密码";
-- 公有 DBLink
ALTER PUBLIC DATABASE LINK 链接名
CONNECT TO 远程用户名 IDENTIFIED BY "新密码";
如果记得链接的具体定义,也可以删除重建:
DROP DATABASE LINK 链接名;
CREATE DATABASE LINK 链接名
CONNECT TO 远程用户名 IDENTIFIED BY "新密码"
USING '远程TNS名';
验证是否修复:
SELECT * FROM dual@链接名;
3. 防止再次过期(推荐)
密码过期通常是因为用户的 PROFILE 中设置了 PASSWORD_LIFE_TIME。可以把该用户的密码设为永不过期(或延长至一个很长的周期)。
方法一:修改现有 PROFILE 限制(影响使用同一 profile 的所有用户)
ALTER PROFILE 用户当前的PROFILE名 LIMIT PASSWORD_LIFE_TIME UNLIMITED;
方法二:为 DBLink 用户单独创建专用 PROFILE
CREATE PROFILE dblink_profile LIMIT PASSWORD_LIFE_TIME UNLIMITED;
ALTER USER 远程用户名 PROFILE dblink_profile;
修改 PROFILE 后,已经过期的用户不会自动恢复,需要重新改一次密码(即重复第 1 步)才会应用新的生命周期。
补充说明
- 权限要求:本地修改 DBLink 密码需要拥有该链接或具有
ALTER DATABASE LINK权限;远程改密码需要ALTER USER权限。 - 无法访问远程库? 请联系远程 DBA 执行第 1 步,然后你在本地执行第 2 步。
- 安全与合规:如果公司政策不允许密码永不过期,可以设置较长的生命周期(如 365 天),并建立定期更换 + 同步 DBLink 密码的自动化流程。
- 更安全的方案:如果环境支持,可考虑用 Oracle Wallet 管理凭据,避免在 DBLink 中硬编码密码。
按上述步骤操作后,DBLink 密码过期的问题即可解决。

浙公网安备 33010602011771号