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