有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Oracle JDBC:无效的用户名/密码(ora01017)

我在jdbc连接到oracle数据库服务器时遇到了一个奇怪的问题

我们在tomcat服务器上运行应用程序。这些应用程序使用oracle数据库。所有应用程序都使用相同的凭据

应用程序一整天都运行良好。晚上没有活动。早上,当应用程序尝试重新连接到数据库时,我们会收到一些(2或3)ORA-01017(无效用户名/密码)错误

然后重新连接工作,应用程序将正常运行

这可以工作几天(大约5天),然后是一个或多个应用程序块!所有重新连接尝试均失败

我们追踪了网络通信,发现如果连接失败,发送ORA-01017 NO CREDENTIALSwhere

当然,没有人在晚上触碰这个系统

解决方法之一是每天早上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了


共 (1) 个答案

  1. # 1 楼答案

    奇怪。一些想法:

    1. 记录用户名和密码几天,以确保它们是正确的。代码中的某些错误可能会覆盖您不期望的值

    2. 考虑使用由Tomcat提供的连接池的JNDI。DBCP有一些非常高级的选项来检查连接是否仍然有效以及如何重新连接。在那之后,你不应该再在日志中看到任何与连接相关的问题。这也将提高安全性,因为这些应用不再需要知道数据库密码

    3. 这可能是资源泄漏的问题(如果应用程序从未返回连接,就会发生),但我预计会出现不同的错误消息

    4. 一些数据库(DB2、H2)允许创建视图,使来自其他数据库的远程表(如本地表)可见。不确定Oracle是否支持此功能,但如果支持,则此远程表的用户名/密码可能是错误的

    也要考虑这篇博客文章中的要点:Oracle ORA-01017 tips

    乍一看,帖子中的任何内容都不会引起您的问题,但可能有脚本正在处理tnsnames.ora(例如分发新副本)

    或者DBA在每日备份时禁用了所有用户