oracle 无法从套接字读取更多的数据

Caused by: org.hibernate.TransactionException: JDBC rollback failed
    at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:170)
    at org.springframework.orm.hibernate3.HibernateTransactionManager.doRollback(HibernateTransactionManager.java:577)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:631)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:608)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.completeTransactionAfterThrowing(TransactionAspectSupport.java:328)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:111)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:209)
    at $Proxy1.retrieve(Unknown Source)
    at com.vtradex.thorn.server.servlet.LoginServlet.authenticateUser(LoginServlet.java:94)
    at com.vtradex.wms.server.web.servlet.WMSLoginServlet.doPost(WMSLoginServlet.java:45)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:662)
Caused by: java.sql.SQLRecoverableException: 无法从套接字读取更多的数据
    at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1200)
    at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1155)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:279)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)
    at oracle.jdbc.driver.T4C7Ocommoncall.doOROLLBACK(T4C7Ocommoncall.java:68)
    at oracle.jdbc.driver.T4CConnection.doRollback(T4CConnection.java:642)
    at oracle.jdbc.driver.PhysicalConnection.rollback(PhysicalConnection.java:3716)
    at org.apache.commons.dbcp.DelegatingConnection.rollback(DelegatingConnection.java:265)
    at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.rollback(PoolingDataSource.java:288)
    at org.hibernate.transaction.JDBCTransaction.rollbackAndResetAutoCommit(JDBCTransaction.java:183)
    at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:162)
    ... 24 more

此异常导致了系统登陆不了以及相关作业无法进展。

后来重启了数据库暂时可以解决问题,但是时隔不多久又会产生这个问题。

原先以为是数据库版本或者程序导致的,不过经过很多异常案例分析初步认为可能是程序调用了存储过程发生异常导致的数据库崩溃。

 

 

网上参考信息:

 

上网查了一下资料,有以下原因可能会造成此类错误:
1 数据库版本需要升级(目前是9201+windows2000 as)
2 表或索引上有数据坏块
3 SESSION之间的阻塞
4 初始化参数设置
参考metalink文档:ORA-600[kksscl-inf-inl-loop] during heavy load with CURSOR_SPACE_FOR_TIME=TRUE

计划处理此问题的步骤如下:
1 找ORACLE支持(公司不出钱,这一步跳过去)
2 扫描表及索引,查看是否有坏块,如果有,进行坏块修复,或表及索引的重建
3 在应用停了之后,升级数据库到9204,检查以下初始化参数
cursor_space_for_time=false
session_cached_cursors=0
cursor_sharing=force
4 在下次错误发生,查看阻塞的SESSION
如果是因为SESSION阻塞,造成的应用程序中的错误,修改以下初始化参数
- set TIMED_STATISTICS=FALSE
- set _row_cache_cursors=20 or more (10 default)
- don't do any kind of tracing

检查过程:
SQL> select 'ANALYZE TABLE '||table_name||' VALIDATE STRUCTURE CASCADE ;' from user_tables;

发现问题:
SQL> ANALYZE TABLE gs12366_gljk.GLJK_YSWG_LIST VALIDATE STRUCTURE CASCADE ;
ANALYZE TABLE gs12366_gljk.GLJK_YSWG_LIST VALIDATE STRUCTURE CASCADE
*
ERROR 位于第 1 行:
ORA-01499: table/index cross reference failure - see trace file

开发人员还有一些附加的要求:
系统设计的是定期将gljk_yswg_list中的数据删除后放在历史表中(2733918条记录),但总是有一些数据在插入时提示列值过大,而两个表结构一样,也找不到原因.
积累到现在共有205045条记录,

处理过程:
先查看空闲的表空间,确认是否有足够的空间来保存临时数据
1 create table wang_temp1 as select * from GLJK_YSWG_LIST where skssq>'2008' ;
-- 共有87114条
2 create table wang_temp2 as select * from GLJK_YSWG_LIST where skssq<'2008';
-- 共有205045条
3 停掉所有相关的JAVA应用
4 备份表上的建索引脚本,rename table GLJK_YSWG_LIST;
5 rename table ww_temp1 to GLJK_YSWG_LIST;
6 运行创建索引脚本,补充上索引.(表上没有触发器,如果有,还需要还原)
7 进入测试查询
8 将wang_temp2中的数据插入到历史表GLJK_YSWG_HISTORY_LIST中.如果批量插入失败,写一个简单的存储过程进行插入,并捕捉不能插入的记录,分析原因进行解决.
9 处理完毕后,删除中转表wang_temp1 wang_temp2

在此做个记录,以供以后出现类似问题时参考.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值