上一篇
场景还原:
凌晨2点,你正睡得香甜,突然手机疯狂震动——监控系统报警,生产库连不上了!打开电脑一看,应用日志里赫然躺着"ORA-12687: The credential has expired"的红色报错,别慌,这份2025年最新实战指南能让你10分钟内远程解决问题。
这个报错直白得很——Oracle数据库的某个安全凭证过期了,就像你的银行卡密码失效一样,常见于以下场景:
通过SQL*Plus连上数据库(哪怕本地能连也行),执行:
SELECT username, account_status, expiry_date FROM dba_users WHERE expiry_date < SYSDATE AND account_status = 'OPEN';
如果看到关键用户(如APEX_PUBLIC_USER等)显示"EXPIRED",就是密码过期惹的祸。
ADMINISTER KEY MANAGEMENT SET KEYSTORE CLOSE; -- 先关闭 ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "钱包密码"; SELECT * FROM v$encryption_wallet; -- 查看状态
若看到STATUS=CLOSED
却无法打开,说明钱包密码可能被修改过。
tnsping 服务名 # 测试网络连通性 lsnrctl status # 查看监听日志有无认证错误
ALTER USER 用户名 IDENTIFIED BY "新密码" REPLACE "旧密码"; -- 示例(修改SYS密码需特殊处理): ALTER USER SYSTEM IDENTIFIED BY "NewPass123#" ACCOUNT UNLOCK;
⚠️ 注意:如果启了密码复杂度校验,可能需要包含大小写+数字+特殊字符
-- 以sysdba身份执行: ADMINISTER KEY MANAGEMENT ALTER KEYSTORE PASSWORD IDENTIFIED BY "旧密码" SET "新密码";
-- 修改密码策略(需DBA权限) ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; -- 然后重置相应用户密码
# 在数据库服务器执行 oklist -k -t /etc/krb5.keytab # 查看票据有效期 kinit -k -t /etc/krb5.keytab oracle/数据库主机名@域名 # 重新获取票据
-- 关闭密码验证(仅测试环境可用!) ALTER SYSTEM SET remote_os_authent=TRUE SCOPE=SPFILE; SHUTDOWN IMMEDIATE; STARTUP;
定期检查脚本:每月跑一次密码过期预警
SELECT username, expiry_date FROM dba_users WHERE expiry_date BETWEEN SYSDATE AND SYSDATE+7; -- 提前7天预警
修改默认策略:
-- 修改默认profile(建议设置90天有效期) ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 90;
钱包维护日历:为Oracle Wallet设置手机提醒,建议每3个月更新一次密码
INSERT INTO audit_passwd_changes VALUES (USER, SYSDATE, '修改SYSTEM密码');
遇到ORA-12687就像遇到突然停电——虽然吓人但解决不难,按照这个流程操作,你完全可以在业务部门察觉前悄悄修复,记得收藏本文,下次报错时就能淡定应对了!
(本文方法经Oracle 19c/21c实测有效,最后更新:2025年8月)
本文由 剑雨信 于2025-08-01发表在【云服务器提供商】,文中图片由(剑雨信)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/509935.html
发表评论