我有一个奇怪的问题与jdbc连接到oracle数据库服务器 .
我们在运行tomcat服务器上的应用程序 . 这些应用程序使用oracle数据库 . 所有应用程序都使用相同的凭据
应用程序运行良好的一整天 . 晚上没有活动 . 当应用程序尝试将自己重新连接到数据库时,早上我们会收到一些(2或3)ORA-01017(无效的用户名/密码)错误 .
然后重新连接工作,应用程序将正常运行 .
这可以工作几天(大约5天),然后一个或多个应用程序块!所有重新连接尝试都失败了 .
我们已经跟踪了网络通信,发现如果连接失败并且发送了 ORA-01017 NO CREDENTIALS
.
当然没有人在晚上接触系统 .
一种解决方法的尝试是我们每天早上6点重启tomcat服务器以清理每个连接缓存或池 . 它没有帮助 .
怎么了?有任何想法吗?
在完全堵塞的情况下持续5天的间隔(每天重复)对我来说看起来很奇怪 .
Config :
数据库Oracle 10.2,JDBC驱动程序11.2瘦,tomcat 6.0.24,JDK 6,操作系统是Windows,一些应用程序是Avaya Voice Portal 5.0的Dialogs .
我们自己的(非VP)应用程序使用简单的连接(没有池) .
该系统最初设置在Windows 2003服务器上,在apserver和tomcat服务器之间具有WAN .
系统现在迁移到数据库服务器附近的linux(CentOS)服务器,并且工作正常 . 没有ORA-01017了 .
2 回答
奇 . 一些想法:
记录用户名和密码几天,以确保它们是正确的 . 代码中的某些错误可能会覆盖您不期望的值 .
考虑将JNDI与Tomcat提供的连接池一起使用 . DBCP有一些非常高级的选项来检查连接是否仍然存在以及如何重新连接它 . 之后,您不再在日志中看到任何与连接相关的问题 . 这也可以提高安全性,因为没有任何应用程序需要知道数据库密码 .
这可能是资源泄漏的问题(如果应用程序永远不会返回连接,则会发生这种情况)但是我希望有一个不同的错误消息 .
某些数据库(DB2,H2)允许创建视图,使其他数据库中的远程表像本地表一样可见 . 不确定Oracle是否支持此功能,但如果支持,则可能是此远程表的用户名/密码错误 .
另请考虑此博客文章中的要点:Oracle ORA-01017 tips
乍一看,帖子中没有任何内容可能会导致您的问题,但也许某些脚本正在操纵
tnsnames.ora
(例如分发新副本) .或者DBA在每日备份时禁用所有用户 .
我会检查Oracle监听器和跟踪日志 . 正如Aaron Digulla所说,这听起来像资源枯竭 .