zoukankan      html  css  js  c++  java
  • java.sql.SQLException: Io 异常: Got minus one from a read call

     

    博客分类:
     

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

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

    查询数据库连接情况:

    Java代码  收藏代码
    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.  

     

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

     

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

    Java代码  收藏代码
    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.  

     

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

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

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

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

    摘录如下:

    Java代码  收藏代码
    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  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代码  收藏代码
    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啊。  

     

    Java代码  收藏代码
    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. 只是,我重启之后值也都下降了,估计还有其他原因导致资源不足的吧。 
  • 相关阅读:
    vi命令大全
    理解proc文件系统
    读目录
    取得系统资源信息
    qtempinc
    我实现的一个正则表达式代码
    oracle内置函数大全
    STL算法
    unix基础教程
    两日期间的天数
  • 原文地址:https://www.cnblogs.com/lcword/p/8228480.html
Copyright © 2011-2022 走看看