偶然遇到一个关于 jdbc 的问题

2019-06-18 12:44:58 +08:00
 mcdull619
问题:
昨晚接到客户电话 , 网站挂了 , 打不开了 !
远程登录上去看日志 , 日志显示:java.sql.SQLException: Connections could not be acquired from the underlying database!

项目环境:
两个 dotnet 客户端 (上位机,实时接收下位机上传的数据)
四个 windows server (数据保存 , 监控 , 报警等服务)
一个 java 网站 (查看数据)
项目都是 2009 年左右开发的 , dotnet 上位机负责接受处理数据 , java 网站用于显示 , 配套使用 . 一直在客户服务器上正常运行 .
jdbc 版本 : classes12.jar (百度了一下 , 好古老的版本...)

解决:
网上经过一番查询 , 找到原因是因为 Oracle 密码保护机制 , 密码即将过期 , plsql 登录时也提示密码还有 6 天过期 .
状态为 EXPIRED(GRACE) , 由于以前的密码策略已存在 , 所以只能将密码改一下 , 然后再改回原密码 , 再按照网上方式将密码修改为永不过期 , 网站正常 .

疑问:
因 oracle 密码即将过期 , 导致网站连接失败 , 但整个过程中 dotnet 程序一切正常 , 没丢任何数据(和网站用的同一 oracle 用户 )
本人业余程序员 ,个人猜测应该是驱动差异导致的 . 这个 jdbc 驱动太老了 , 本身已无讨论的意义 , 只是偶然遇到这种情况 , 好奇而已 ...

不知道大家在现实中又没用遇到过这种情况 ?
1052 次点击
所在节点    程序员
3 条回复
littlewing
2019-06-18 13:26:05 +08:00
JDBC 把数据库返回的 warning 当做 EXception 抛出来了
littlewing
2019-06-18 13:28:08 +08:00
@littlewing JDBC 中 SQLWarning 是 SQLException 子类,代码中是不是 catch 了 SQLException 就直接报错了?
mcdull619
2019-06-18 14:04:21 +08:00
@littlewing 你说的很有道理 , 也有可能是代码中捕获的异常 , 快 10 年的项目了 , 我没有源代码 , 也不太懂 java , 之前客户那边一直用的 oracle8i , Z 全年给升级到 11g , 密码过去这个策略没有修改 , 是默认值 180 天 .
所以这次遇到还有 7 天密码过期 , 会导致 jdbc 连接失败这个问题 ! dotnet 中可以没用当做一种异常来处理 . classes12 适用于 JDK 1.2 and JDK 1.3 太老了 , 不做讨论了 , 谢谢 .

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/575060

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX