Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Oracle JDBC:无效的用户名/密码(ora-01017)_Java_Oracle_Jdbc_Tomcat6_Ora 01017 - Fatal编程技术网

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

Java Oracle JDBC:无效的用户名/密码(ora-01017),java,oracle,jdbc,tomcat6,ora-01017,Java,Oracle,Jdbc,Tomcat6,Ora 01017,我在jdbc连接到oracle数据库服务器时遇到了一个奇怪的问题 我们在tomcat服务器上运行应用程序。这些应用程序使用oracle数据库。所有应用程序都使用相同的凭据 应用程序整天运行良好。晚上没有活动。早上,当应用程序尝试重新连接到数据库时,我们收到一些(2或3)ORA-01017(无效用户名/密码)错误 然后重新连接工作,应用程序将正常运行 这可以工作几天(大约5天),然后是一个或多个应用程序块!所有重新连接尝试均失败 我们跟踪了网络通信,发现如果连接失败,则没有凭证发送到哪里 当然,没

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

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

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

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

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

我们跟踪了网络通信,发现如果连接失败,则没有凭证发送到哪里

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

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

奇怪。一些想法:

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

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

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

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

  • 也请考虑本博客文章中的要点:

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


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

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

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

    关于连接到oracle数据库:


    关于java类路径:

    凭据是否绑定到LDAP帐户,如果是,该帐户是否对允许其在一天中的什么时间登录有限制(例如,导致夜间问题)?试着想想您在哪里持有凭据,以及晚上会发生什么事,是否有用于备份或其他用途的资源?@normalocity:在本地配置文件中配置的简单数据库用户。否LDAP.@A.B.Cade:凭据存储在本地文件中。据我所知,系统是全天候运行的。我见过这种问题,因为当数据库停止夜间备份时,应用服务器连接池没有很好地释放资源。解决方法是在备份之前停止应用程序服务器,并在备份之后重新启动它。您确定数据库不会在一夜之间关闭吗?谢谢您的回答。我来看看你的一些建议。一点:我们使用的是瘦驱动程序。这意味着没有使用tnsname.ora。看起来我在我的原始帖子中没有提到这一点。因为错误不再发生(从windows server切换到centos系统(可能只是巧合))并且由于有用的建议,我将此设置为已回答。