近期,生成环境切了新的数据库后,间歇性出现“ORA-01017: invalid username/password; logon denied”错误。排查及解决方式总结如下。

问题背景

最近,由于项目高运算量,项目组将数据库从项目群中剥离了出来,以减轻整个数据库平台的压力。新的数据库采用的是12c,故升级 Oracle 驱动至 ojdbc 7。升级后就发现了处理DATE类型存在问题,通过“MyBatis使用自定义TypeHandler转换类型”的方式做了解决。

但几天后,通过日志平台发现了另外的问题,即“ORA-01017: invalid username/password; logon denied”错误——用户、密码不正确。

这个问题比较奇怪:

  • 账号、密码是在华为的配置中心进行配置,所以应用是不会去做密码的更改;
  • 应用启动时,会去配置中心拉取一次数据库的配置,之后,配置在本地缓存,不会再做更改;
  • 通过日志观察,“ORA-01017: invalid username/password; logon denied”错误一天大概出现几次,频率不高,大部分时间都能正常访问数据库。这同时验证了,账号密码是正确的。
  • 应用是采用Spring+MyBatis+DBCP的架构,且用了几年都没有出过问题。相当稳定。
  • 观察日志,是从切换了新数据库之后才出现了。
  • 数据库平台采用了“双活架构”

问题分析

从上述分析看,感觉跟应用的关系不大。问题还是出在数据库平台。 拉平台的人一起查问题,我们项目组认为问题在数据库平台,而平台却认为问题出,几天也没有个结论。 后面,平台的人把问题反馈给了Oracle的人。

几天后,Oracle反馈了,说是ojdbc7-4.0驱动上面的bug。该bug只在大数据量处理时才会出现。晕死。

这也从侧面反映出了这个项目的数据库运算量是有点高了,远远超过了Oracle的压力测试了。

解决方案

目前,把驱动降级到原来的版本。观察了几日不再报这个错误了。遂解决。