日期:2014-05-17  浏览次数:21283 次

JDBC连接池偶尔"Io 异常: The Network Adapter could not establish the connection"
错误提示:Io 异常: The Network Adapter could not establish the connection
数据库服务器端环境:HPUX + Oracle9.2 (小机服务能力还是很强的,DB连接数约为300~400)
应用服务器端环境:Windows 2003 企业版 + Tomcat5.0.28
应用连接方式:Java JDBC + dbcp

现象描述:
  程序偶尔出现上述异常提示,我的程序内建有连接池重置处理,当出现上述异常后,自动重置连接池,一般能够重新连接上数据库。

排除问题:
  1、url连接串之类的问题
  2、网络问题
  3、其他简单配置问题(生产环境已经运行2年)

怀疑问题:
  1、是否服务器连接数不够?(自己做过实验,当应用达到DB最大连接数时的提示为拒绝连接,与此不同)
  2、是否其他应用消耗DB服务器资源?(有怀疑,但没有证据,如哪位仁兄遇到类似问题,望不吝赐教)
  3、操作系统连接数?(也是怀疑,是否HPUX的连接数不够了,公司的服务保障上去看了,说没有用完,不知哪位仁兄有类似经历)

此问题已经困扰我很久,虽不致使系统瘫痪,但终究是块心病,望早日去之。





------解决方案--------------------
我随便说上几句.不知道能否有帮助

在内蒙这边项目 也是遇到类似于你这种情况

有一点不同 这边是长时间不操作数据库会出现这个问题

当时结果是,数据库限制了连接时间,

也就是说 长时间不操作就会丢失连接

数据库服务器端环境:HPUX + Oracle10G
------解决方案--------------------
processes参数改大点,比如1000,默认的150是不够。
------解决方案--------------------
因为当时我们这边生产库不在自己主机上

而是放在其他厂家那边

所以具体的情况也不是很清楚 

一样是这个错误
Io 异常: The Network Adapter could not establish the connection 

但是当时厂家给的回复就是这个..

当时这边也是不影响正常的程序 但就是后台总报这个错误

后来把数据库迁移到自己的服务器上 这个问题就解决了..

---他们的主机我们没有很大的权限 所以具体他们那边就不清楚了


------解决方案--------------------
我们这边的数据库是放在两台机器上 做的双机~
例如
136.224.24.71,
136.224.24.78,

应用没有放在同一台机器上
而是在
136.224.24.70
136.224.24.79
做的集群~

应用连接直接访问的双机地址

类似于这样
nmdw =
(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 136.224.24.11)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = 136.224.24.16)(PORT = 1521))(LOAD_BALANCE = yes)(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = nmdw)))

还有一点
我记得 原来总报错的时候 数据库是在单机状态下运行的~

不知道您想知道是不是这些


------解决方案--------------------
nmdw = 
(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 136.224.24.71)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = 136.224.24.78)(PORT = 1521))(LOAD_BALANCE = yes)(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = nmdw))) 
刚才URL中那两个IP是映射地址

真实地址应该是这个
------解决方案--------------------
引用楼主 wangqiyy 的帖子:
错误提示:Io 异常: The Network Adapter could not establish the connection

------解决方案--------------------
1.换个网卡试试(经常有这种情况,别说不信邪)
2.JDBC那边有没的例外处理有没有关闭连接?我遇到N次这种情况.
3.DB那边用的是共享模式?如果应用服务器那边用了连接池,DB最好用专用连接.
4.JDBC是不是每个页面,每个程序都会打开一个数据库连接?如果是换成静态的连接,一个应用用户只开一个连接就够了
5.IO,RAM看是否正常
6.看一下DB的警告日志看有没问题
7.查一下DB的等待事件
------解决方案--------------------
哦,兄弟还没结贴啊,呵
那俺继续说点可能性吧
1.换个高版本的JDBC驱动试试
2.防火墙有没一些对包的控制,最好关了防火墙试试
3.LISTENER.TNS里用的是DNS名还是IP?最好换成IP试试


------解决方案--------------------
今天遭遇ORA-12560: TNS: 协议适配器错误的问题,经过一番努力问题已经解决,与大家共享。
造成ORA-12560: TNS: 协议适配器错误的问题的原因有三个:
1.监听服务没有起起来。windows平台个一如下操作:开始---程序---管理工具---服务,打开服务面板,

启动oraclehome92TNSlistener服务。
2.database instance没有起起来。windows平台如下操作:开始---程序---管理工具---服务,打开服务

面板,启动oracleserviceXXXX,XXXX就是你的database SID.
3.注册表问题。regedit,然后进入HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0将该环境变量ORACLE_SI

D设置为XXXX,XXXX就是你的database SID.或者右几我的电脑,属性--高级--环境变量---系统变量--新建

,变量名=oracle_sid,变量值=XXXX,XXXX就是你的database SID.或者进入sqlplus前,在command line下