出现的问题: Oracle 11g 数据库突然无法访问,通过web应用 或 Oracle自带的 SQL developer 工具也无法连接,然而Oracle自带的Sql plus 却能成功连接访问数据。
在用SQL develper 工具连接时直接提示访问连接失败:java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection 错误编码17002 code。
同时发现 tnsping 值非常大 。如下图:
解决:
从以上错误信息可以判断出可能是以下几个问题:
1. 数据库监听肯定出现异常 ,因为Sql plus 和Sql develper 的访问机制是不一样的,前者是直接访问数据库数据,而后者是通过
监听找到相应端口进行访问的。
通常有时我们会发现,监听的服务我们是能正常启动,给人的感觉监听没有任何异常。但是我需要告诉你
不要被这种假象迷惑了你判断力。 监听出现异常并不是表示说监听不能启动,有可能是监听无法响应,或自身运行不良。
监听本身这个服务可能是没有问题的。那说明监听可能因为其他因素导致不正常工作。
另外,监听日志文件大小如果大于4G后,也会导致监听运行异常。无法访问数据的现象。
D:\app\diag\tnslsnr\administrator\listener\trace目录下的listener.log
我本次遇到的问题就是这个文件已经4G多了,就导致我的应用突然无法访问数据库了。
可以通过在listener.ora 文件中配置 LOGGING_LISTENER = OFF 关闭监听日志的记录
2. IP地址和主机名的映射关系配置不正确 这个主要看 host文件了
3. Oracle 数据库所在的服务器和PC 的DNS解析有问题。
如果这台服务器存在多个地址,那么监听会根据DNS的解析情况进行访问,如果监听拿到的第一个IP地址的DNS有问题,那么
只有在请求超时后,才会去尝试下一个IP的DNS解析请求。这样就会让你的连接请求等待很久 甚至超时。