java.sql.SQLException: Io 异常: Got minus one fro...

Tomcat服务器下的应用连接Oracle时报错,出现以下异常:

java.sql.SQLException: Io 异常: Got minus one from a read call

查询数据库连接情况:

Java代码 复制代码  收藏代码09140212_arng.gif
  1. SQL> select username,count(username) from v$session where username is not null group by username;   
  2.   
  3. USERNAME                       COUNT(USERNAME)   
  4. ------------------------------ ---------------   
  5. SP2                                         33  
  6. YWTWEBDB                                    14  
  7. SYS                                          2  
  8. INFO                                         1  
  9. MF                                         658  
  10. UC                                         183  
  11.   
  12. 6 rows selected.  
SQL> select username,count(username) from v$session where username is not null group by username;

USERNAME                       COUNT(USERNAME)
------------------------------ ---------------
SP2                                         33
YWTWEBDB                                    14
SYS                                          2
INFO                                         1
MF                                         658
UC                                         183

6 rows selected.

 

Java代码 复制代码  收藏代码09140212_arng.gif
  1. SQL> select count(*) from v$session where status='ACTIVE';   
  2.   
  3.   COUNT(*)   
  4. ----------   
  5.        675  
SQL> select count(*) from v$session where status='ACTIVE';

  COUNT(*)
----------
       675

 

原因不明:表现是数据库的连接数比较大,临时处理是重启数据库,重启后解决,但估计不是最终的解决方法。。重启后的连接情况:

Java代码 复制代码  收藏代码09140212_arng.gif
  1. 正常的时候的数据库连接数:   
  2. SQL> select username,count(username) from V$SESSION where username is not null group by username ;   
  3.   
  4. USERNAME                       COUNT(USERNAME)   
  5. ------------------------------ ---------------   
  6. SP2                                         11  
  7. YWTWEBDB                                     2  
  8. SYS                                          1  
  9. INFO                                         1  
  10. MF                                          79  
  11. MYJIN                                        1  
  12. UC                                          19  
  13.   
  14. 7 rows selected.  
正常的时候的数据库连接数:
SQL> select username,count(username) from V$SESSION where username is not null group by username ;

USERNAME                       COUNT(USERNAME)
------------------------------ ---------------
SP2                                         11
YWTWEBDB                                     2
SYS                                          1
INFO                                         1
MF                                          79
MYJIN                                        1
UC                                          19

7 rows selected.

 

以下收集了网上此问题的相关解决方法如下:

http://www.iteye.com/topic/1126453

http://blog.sina.com.cn/s/blog_529aacbd0100t22b.html

http://hi.baidu.com/xjieni/item/1afbff62dab025167cdecc21

摘录如下:

Java代码 复制代码  收藏代码09140212_arng.gif
  1. 今日无意中用java连接oracle时,竟出现以下异常,甚是奇怪:    
  2. Caused by: java.sql.SQLException: Io 异常: Got minus one from a read call    
  3. at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)    
  4. at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)    
  5. at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:333)    
  6. at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:404)    
  7. at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:468)    
  8. at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:314) ....    
  9.   
  10. 问题在重新启动应用后,应用连接oracle时出错,无法启动应用。    
  11.   
  12. 最后重新启动oracle11g的服务,没有问题了,但是还没有找到具体原因。    
  13.   
  14. 后来在另外一台应用上也发现同样问题,发现问题的严重性,经过分析可能是驱动问题;在不重新启动oracle11g服务的情况下,替换最新版本的jdbc驱动包,问题解决;    
  15.   
  16. 出问题的ojdbc14.jar版本:(查看jar包的MANIFEST.MF文件)    
  17. Manifest-Version: 1.0    
  18. Specification-Title:    Oracle JDBC driver classes for use with JDK14    
  19. Sealed: true    
  20. Created-By: 1.4.2_08 (Sun Microsystems Inc.)    
  21. Implementation-Title:   ojdbc14.jar    
  22. Specification-Vendor:   Oracle Corporation    
  23. Specification-Version:  Oracle JDBC Driver version - "10.2.0.1.0"    
  24. Implementation-Version: Oracle JDBC Driver version - "10.2.0.1.0"    
  25. Implementation-Vendor:  Oracle Corporation    
  26. Implementation-Time:    Wed Jun 22 11:19:45 2005    
  27.   
  28. Name: oracle/sql/converter/    
  29. Sealed: false    
  30.   
  31. Name: oracle/sql/    
  32. Sealed: false    
  33.   
  34. Name: oracle/sql/converter_xcharset/    
  35. Sealed: false    
  36.   
  37.   
  38. 解决问题的ojdbc14.jar版本:    
  39. Manifest-Version: 1.0    
  40. Specification-Title:    Oracle JDBC driver classes for use with JDK14    
  41. Sealed: true    
  42. Created-By: 1.4.2_14 (Sun Microsystems Inc.)    
  43. Implementation-Title:   ojdbc14.jar    
  44. Specification-Vendor:   Oracle Corporation    
  45. Specification-Version:  Oracle JDBC Driver version - "10.2.0.4.0"    
  46. Implementation-Version: Oracle JDBC Driver version - "10.2.0.4.0"    
  47. Implementation-Vendor:  Oracle Corporation    
  48. Implementation-Time:    Sat Feb  2 11:40:29 2008    
  49.   
  50. Name: oracle/sql/converter/    
  51. Sealed: false    
  52.   
  53. Name: oracle/sql/    
  54. Sealed: false    
  55.   
  56. Name: oracle/sql/converter_xcharset/    
  57. Sealed: false   
今日无意中用java连接oracle时,竟出现以下异常,甚是奇怪: 
Caused by: java.sql.SQLException: Io 异常: Got minus one from a read call 
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134) 
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179) 
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:333) 
at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:404) 
at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:468) 
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:314) .... 

问题在重新启动应用后,应用连接oracle时出错,无法启动应用。 

最后重新启动oracle11g的服务,没有问题了,但是还没有找到具体原因。 

后来在另外一台应用上也发现同样问题,发现问题的严重性,经过分析可能是驱动问题;在不重新启动oracle11g服务的情况下,替换最新版本的jdbc驱动包,问题解决; 

出问题的ojdbc14.jar版本:(查看jar包的MANIFEST.MF文件) 
Manifest-Version: 1.0 
Specification-Title:    Oracle JDBC driver classes for use with JDK14 
Sealed: true 
Created-By: 1.4.2_08 (Sun Microsystems Inc.) 
Implementation-Title:   ojdbc14.jar 
Specification-Vendor:   Oracle Corporation 
Specification-Version:  Oracle JDBC Driver version - "10.2.0.1.0" 
Implementation-Version: Oracle JDBC Driver version - "10.2.0.1.0" 
Implementation-Vendor:  Oracle Corporation 
Implementation-Time:    Wed Jun 22 11:19:45 2005 

Name: oracle/sql/converter/ 
Sealed: false 

Name: oracle/sql/ 
Sealed: false 

Name: oracle/sql/converter_xcharset/ 
Sealed: false 


解决问题的ojdbc14.jar版本: 
Manifest-Version: 1.0 
Specification-Title:    Oracle JDBC driver classes for use with JDK14 
Sealed: true 
Created-By: 1.4.2_14 (Sun Microsystems Inc.) 
Implementation-Title:   ojdbc14.jar 
Specification-Vendor:   Oracle Corporation 
Specification-Version:  Oracle JDBC Driver version - "10.2.0.4.0" 
Implementation-Version: Oracle JDBC Driver version - "10.2.0.4.0" 
Implementation-Vendor:  Oracle Corporation 
Implementation-Time:    Sat Feb  2 11:40:29 2008 

Name: oracle/sql/converter/ 
Sealed: false 

Name: oracle/sql/ 
Sealed: false 

Name: oracle/sql/converter_xcharset/ 
Sealed: false

 

Java代码 复制代码  收藏代码09140212_arng.gif
  1. Caught: java.sql.SQLException: Io 异常: Got minus one from a read call   
  2. 使用JDBC连接Oracle时,多次出现上述错误,后来去网上找了下,基本提供的方法有这么几种:   
  3.   
  4. 1:数据库连接满了,扩大数据库连接池   
  5.   
  6. 2:所登录的机子IP不在sqlnet.ora内,加入后重启listerner即可   
  7.   
  8. 3:数据库负载均衡时,指定了(SERVER=DEDICATED),去除这个即可   
  9.   
  10. 4:网管在Oracle配置上限制了该台机子访问Oracle的权限,这个问题基本和2类似,也是修改Oracle配置即可;   
  11. 正在寻找解决办法,现在数据库不归我管,不能重启,扩大连接池治标不治本,而且数据库连接池是我自己写的,盲目的扩大会造成其他用户访问的多种问题,最好是能销毁之前创建的那些链接。哎,这就是代码不规范的坏处啊。创建Connection的时候一定不能忘了close,就算连接池也不要忘了returnConnection啊。  
Caught: java.sql.SQLException: Io 异常: Got minus one from a read call
使用JDBC连接Oracle时,多次出现上述错误,后来去网上找了下,基本提供的方法有这么几种:

1:数据库连接满了,扩大数据库连接池

2:所登录的机子IP不在sqlnet.ora内,加入后重启listerner即可

3:数据库负载均衡时,指定了(SERVER=DEDICATED),去除这个即可

4:网管在Oracle配置上限制了该台机子访问Oracle的权限,这个问题基本和2类似,也是修改Oracle配置即可;
正在寻找解决办法,现在数据库不归我管,不能重启,扩大连接池治标不治本,而且数据库连接池是我自己写的,盲目的扩大会造成其他用户访问的多种问题,最好是能销毁之前创建的那些链接。哎,这就是代码不规范的坏处啊。创建Connection的时候一定不能忘了close,就算连接池也不要忘了returnConnection啊。

 

Java代码 复制代码  收藏代码09140212_arng.gif
  1. 因为,数据库一直都是正常的,所以不可以是那些配置之类的错误。   
  2. 后面DBA查了些东西后,给出结论说是,系统资源不够了。   
  3. --查看系统资源   
  4. SELECT   resource_name,   
  5.          current_utilization,   
  6.          max_utilization,   
  7.          LIMIT,   
  8.          ROUND (max_utilization / LIMIT * 100) || '%' rate   
  9.   FROM   (SELECT   resource_name,   
  10.                    current_utilization,   
  11.                    max_utilization,   
  12.                    TO_NUMBER (initial_allocation) LIMIT   
  13.             FROM   v$resource_limit   
  14.            WHERE   resource_name IN ('processes', 'sessions')   
  15.                    AND max_utilization > 0);   
  16.     
  17. RESOURCE_NAME                  CURRENT_UTILIZATION MAX_UTILIZATION      LIMIT RATE   
  18. ------------------------------ ------------------- --------------- ---------- -----   
  19. processes                                      312             500        500 100%   
  20. sessions                                       317             509        555 92%   
  21. 发现是资源不足。   
  22. 处理方法是:   
  23. alter system set processes=1000 scope=spfile;   
  24. alter system set sessions=1110 scope=spfile; 然后重启数据库   
  25.     
  26. 只是,我重启之后值也都下降了,估计还有其他原因导致资源不足的吧。  

转载于:https://my.oschina.net/u/1012289/blog/151582

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值