繁体   English   中英

Oracle JDBC:用户名/密码无效 (ora-01017)

[英]Oracle JDBC : invalid username/password (ora-01017)

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

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

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

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

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

我们跟踪了网络通信,发现如果连接失败并显示ORA-01017 NO CREDENTIALS where sent。

当然,没有人在晚上接触系统。

一种解决方法是我们每天早上 6 点重新启动 tomcat 服务器以清理每个连接缓存或连接池。 它没有帮助。

怎么了? 有任何想法吗?

在完全阻塞的情况下持续 5 天的间隔(同时每天重申)对我来说看起来很奇怪。

配置

Database Oracle 10.2, JDBC Driver 11.2 thin, tomcat 6.0.24, JDK 6, OS windows, 部分应用为Avaya Voice Portal 5.0的Dialogs。

我们自己的(非 VP)应用程序使用简单的连接(无池)。


该系统最初设置在 Windows 2003 服务器上,在 apserver 和 tomcat 服务器之间有一个 WAN。

现在系统迁移到数据库服务器附近的一台linux(CentOS)服务器上,运行正常。 不再有 ORA-01017。

对我来说,OracleDriver 的不兼容版本导致了这个问题您的应用程序应该手动注册 oracle 驱动程序(我需要使用哪个 jar)或者 agter java 6 ojdbc.jar 应该在您的应用程序的类路径中。 因此,适用于您的 oracle 安装的 google 兼容驱动程序版本,并在您的 pom 文件中声明它(使用需要的插件将其放入生成的 jar 中)并从代码中手动引用它,或者将 ojdbc.jar 放在您的 jar 可以看到它的某个位置 有用的链接:

关于连接oracle db: 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

正如 Nikita Poberezkin 所说,我检查了我的 JDBC 驱动程序版本,发现它与我们的测试服务器不同。 我删除了它并安装了相同版本的测试服务器,我想它现在已经解决了。

奇怪的。 一些想法:

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

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

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

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

还要考虑这篇博文中的要点: Oracle ORA-01017 提示

乍一看,帖子中的任何内容都不会导致您的问题,但也许某些脚本正在操纵tnsnames.ora (例如分发新副本)。

或者 DBA 在每日备份期间禁用所有用户。

我会检查 Oracle 侦听器和跟踪日志。 正如 Aaron Digulla 所说,这听起来确实有些资源枯竭。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM