`

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

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

分享到:
评论

相关推荐

    How to Install Sandbox Solution

    在SharePoint环境中,沙盒解决方案(Sandbox Solution)是一种安全的部署方式,它允许用户在不影响整个服务器 farm 的情况下,部署自定义功能。...在日常维护和更新过程中,这种部署方式提供了更高的安全性。

    YOLO_object_detection_for_ocr

    YOLO有多个版本,从最初的YOLOv1到YOLOv5,每个版本都在准确性和速度之间找到了更好的平衡。 在本项目中,可能使用了YOLOv3或YOLOv4,因为它们在处理小物体和提高精度方面有所改进。这些模型通常基于深度学习框架,...

    大话OracleRac

    当一个实例需要读取或写入数据时,会通过全局缓存来确保数据在多个实例之间的一致性。同时,RAC通过一个集群同步服务来管理不同节点上的实例状态,以此来检测和处理故障。 知识点四:Oracle RAC的挑战与解决 由于...

    c# excel上传oracle程序

    综上所述,"c# excel上传oracle程序"涵盖了C#编程、数据库连接、数据读取、数据转换、SQL操作、错误处理等多个IT领域的知识点。实际开发过程中,需要根据具体需求和环境选择合适的方法和技术,确保程序的稳定性和...

    远程数据库读取保存示例

    1. **建立连接**:在开始远程数据库操作之前,客户端需要使用WINSOCK的`socket()`函数创建一个套接字,并通过`connect()`函数与服务器建立TCP连接。服务器端则需监听特定端口,等待客户端的连接请求。 2. **发送...

    ORACLE基础知识学习

    - **块**: 块是最小的I/O单位,是数据库读取和写入数据的基本单位。 **1.3 内存结构** - **系统全局区(SGA)**: SGA是Oracle实例的一个重要组成部分,它是一组共享的内存区域,用于存储数据和控制信息。SGA主要...

    oracle_plsql_编程详解

    ### Oracle PL/SQL 编程详解 #### 一、PL/SQL 概述 ##### 1.1 什么是 PL/SQL? PL/SQL(Procedure Language for SQL)是Oracle数据库的一种专用编程语言,它将SQL语句与过程化的编程语言特性相结合,提供了强大的...

    C语言简易ATM机

    开发者需要设置套接字,进行连接请求,发送和接收数据,以及处理异常。这个过程涉及到网络编程的许多核心概念,如端口、IP地址、套接字类型和错误处理。 至于消息队列,这可能是用于ATM机内部不同模块间通信的一种...

    仿QQ应用,运用ADO连接数据库,CSOCKET

    综上所述,这个仿QQ项目是一个实践性极强的案例,涵盖了数据库操作和网络通信两大主题,对于学习和理解ADO数据库编程以及网络套接字通信有很好的参考价值。开发者需要掌握ADO接口的使用,以及如何通过CSOCKET实现...

    mysql数据库管理系统

    6. **网络支持**: MySQL支持TCP/IP、UNIX套接字以及命名管道等多种网络协议,可以在分布式环境中灵活部署。 7. **SQL支持**: 完全支持SQL92标准,提供丰富的数据类型(如INT、VARCHAR、TEXT、BLOB等),以及DML...

    oracle入门经典

    通过本套文档的学习,您不仅能够掌握 Oracle 数据库的基本操作和 SQL 语言的使用方法,还能了解到如何利用 SQL Plus 这一强大的工具进行高效的数据管理和分析工作。随着实践经验的积累,相信您会逐渐成为 Oracle ...

    DTManual-CN

    2. 定义源数据对象,例如从DBF文件中读取数据。 3. 定义目标数据对象,如写入另一个DBF文件。 4. 创建数据链,连接源与目标数据对象。 5. 设置字段映射关系,确保数据的正确匹配与转换。 6. 设定数据更新模式,如...

    基于tcp的聊天软件

    创建基于TCP的聊天软件,首先需要理解网络编程的基本概念,包括套接字(Socket)编程。在Java中,`java.net.Socket`和`java.net.ServerSocket`类是进行TCP通信的核心。客户端通过Socket连接到服务器的ServerSocket,...

    Oracle Solaris 8 man pages section 3: Threads and Realtime Libra

    5. `pthread_rwlock_*`:读写锁提供了一种机制,允许多个读取者同时访问资源,而写入者独占资源。 实时库函数(Realtime Library Functions)则进一步扩展了这些功能,为需要高精度和低延迟的应用提供支持。这些...

    OpenWrt Syslog-ng日志功能.docx

    - `unix-stream(filename)`:监听SOCK_STREAM类型的Unix域套接字。 - `udp((ip),(port))`:在指定的UDP端口接收日志消息。 - `tcp((ip),(port))`:在指定的TCP端口接收日志消息。 - `internal()`:处理syslog-ng自身...

    三层结构 for delphi

    “TSocketConnection”在三层结构中可能扮演着数据传输的角色,它是TCP/IP套接字连接的组件,用于在不同层之间或者客户端与服务器之间进行数据通信。在Delphi中,使用TSocketConnection可以实现客户端与服务器的实时...

    Visual++系统开发实例精粹的源代码(例36~40)

    开发者可能使用了Windows API中的套接字编程,理解HTTP协议的请求和响应格式,并且处理GET、POST等方法。可能还涉及到了文件I/O操作,用于读取和发送静态资源,如HTML、CSS和JavaScript文件。 例38:数据库浏览器 ...

    大漠免费版3.1233

    《大漠免费版3.1233:深入解析与应用指南》 大漠免费版3.1233是一款备受瞩目的计算机辅助软件,它标志着大漠系列软件...随着技术的不断发展,我们期待更多类似的大漠免费版软件涌现,为我们的工作和生活带来更多便利。

    [ADO.NET.4从入门到精通].(美)帕特里克.扫描版

    此外,参考帕特里克博客上的内容可能有助于理解本书中的部分内容,博客地址多次重复提及,表明作者可能在博客中分享了更多关于***的实践经验和技巧。 由于本书为扫描版,内容中可能会出现由于OCR技术识别错误或漏...

Global site tag (gtag.js) - Google Analytics