V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mcdull619
V2EX  ›  程序员

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

  •  
  •   mcdull619 · 2019-06-18 12:44:58 +08:00 · 1102 次点击
    这是一个创建于 1984 天前的主题,其中的信息可能已经有所发展或是发生改变。
    问题:
    昨晚接到客户电话 , 网站挂了 , 打不开了 !
    远程登录上去看日志 , 日志显示: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 驱动太老了 , 本身已无讨论的意义 , 只是偶然遇到这种情况 , 好奇而已 ...

    不知道大家在现实中又没用遇到过这种情况 ?
    3 条回复    2019-06-18 14:04:21 +08:00
    littlewing
        1
    littlewing  
       2019-06-18 13:26:05 +08:00   ❤️ 1
    JDBC 把数据库返回的 warning 当做 EXception 抛出来了
    littlewing
        2
    littlewing  
       2019-06-18 13:28:08 +08:00   ❤️ 1
    @littlewing JDBC 中 SQLWarning 是 SQLException 子类,代码中是不是 catch 了 SQLException 就直接报错了?
    mcdull619
        3
    mcdull619  
    OP
       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 太老了 , 不做讨论了 , 谢谢 .
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2796 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 02:28 · PVG 10:28 · LAX 18:28 · JFK 21:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.