没有更多的数据从套接字错误中读取 [英] No more data to read from socket error
问题描述
我们使用Oracle作为我们Web应用程序的数据库。应用程序大部分时间运行良好,但是我们得到这个没有更多数据从套接字读取的错误。
:java.sql.SQLRecoverableException:没有更多数据要从套接字
读取oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1142)
at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1( T4CMAREngine.java:1099)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:288)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:523)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
at oracle.jdbc.driver .T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:863)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1153)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java :1275)在oracle.jdbc.driver.OraclePreparedS上
tatement.executeInternal(OraclePreparedStatement.java:3576)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3620)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java: 1491)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)
在org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208)
在org.hibernate.loader.Loader.getResultSet(Loader.java:1869)
在org.hibernate.loader .Loader.doQuery(Loader.java:718)
在org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270)
在org.hibernate.loader.Loader.doList(Loader.java :2449)
... 63 more
我们使用spring,hibernate,以下我的applciation上下文文件中的数据源。
< bean class =org.apache.commons.dbcp.BasicDataSource
destroy-method =closeid =dataSource>
< property name =driverClassNamevalue =$ {database.driverClassName}/>
< property name =urlvalue =$ {database.url}/>
< property name =usernamevalue =$ {database.username}/>
< property name =passwordvalue =$ {database.password}/>
< property name =defaultAutoCommitvalue =false/>
< property name =initialSizevalue =10/>
< property name =maxActivevalue =30/>
< property name =validationQueryvalue =select 1 from dual/>
< property name =testOnBorrowvalue =true/>
< property name =testOnReturnvalue =true/>
< property name =poolPreparedStatementsvalue =true/>
< property name =removeAbandonedvalue =true/>
< property name =logAbandonedvalue =true/>
< / bean>
我不确定这是因为应用程序错误,数据库错误还是网络错误。
我们在oracle日志中看到以下内容:
Thu Oct 20 10:29:44 2011
文件d中的错误:\oracle\diag\rdbms\ads\ads\trace\ads_ora_3836.trc(incident = 31653):
ORA- 03137:TTC协议内部错误:[12333] [4] [195] [3] [] [] [] []
事件详情:d:\oracle\diag\rdbms\ads\\ \\ads\incident\incdir_31653\ads_ora_3836_i31653.trc
Thu Oct 20 10:29:45 2011
跟踪倾销正在执行id = [cdmp_20111020102945]
Thu Oct 20 10:29: 49 2011
Sweep [inc] [31653]:已完成
Sweep [inc2] [31653]:已完成
Thu Oct 20 10:34:20 2011
文件d中的错误: \oracle\diag\rdbms\ads\ads\trace\ads_ora_860.trc(incident = 31645):
ORA-03137:TTC协议内部错误:[12333] [4] [195 ] [3] [] [] [] []
事件详情:d:\oracle\diag\rdbms\ads\\\\\\\\\\\\\\\\ ds_ora_860_i31645.trc
Thu Oct 20 10:34:21 2011
Oracle版:11.2.0.1.0 解决方案
对于像这样的错误,您应该使用oracle支持。不幸的是,你没有提到你使用的是什么Oracle版本。该错误可能与优化器绑定窥视有关。根据oracle版本的不同,可以使用不同的解决方法。
有两种方法可以解决这个问题:
_optim_peek_user_binds = false
当然,下划线参数只能在oracle支持的建议下设置
We are using Oracle as the database for our Web application. The application runs well most of the time, but we get this "No more data to read from socket" error.
Caused by: java.sql.SQLRecoverableException: No more data to read from socket
at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1142)
at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1099)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:288)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:523)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:863)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1153)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1275)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3576)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3620)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1491)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1869)
at org.hibernate.loader.Loader.doQuery(Loader.java:718)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270)
at org.hibernate.loader.Loader.doList(Loader.java:2449)
... 63 more
We use spring, hibernate and i have the following for the datasource in my applciation context file.
<bean class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close" id="dataSource">
<property name="driverClassName" value="${database.driverClassName}" />
<property name="url" value="${database.url}" />
<property name="username" value="${database.username}" />
<property name="password" value="${database.password}" />
<property name="defaultAutoCommit" value="false" />
<property name="initialSize" value="10" />
<property name="maxActive" value="30" />
<property name="validationQuery" value="select 1 from dual" />
<property name="testOnBorrow" value="true" />
<property name="testOnReturn" value="true" />
<property name="poolPreparedStatements" value="true" />
<property name="removeAbandoned" value="true" />
<property name="logAbandoned" value="true" />
</bean>
I am not sure whether this is because of application errors, database errors or network errors.
We see the following on the oracle logs
Thu Oct 20 10:29:44 2011
Errors in file d:\oracle\diag\rdbms\ads\ads\trace\ads_ora_3836.trc (incident=31653):
ORA-03137: TTC protocol internal error : [12333] [4] [195] [3] [] [] [] []
Incident details in: d:\oracle\diag\rdbms\ads\ads\incident\incdir_31653\ads_ora_3836_i31653.trc
Thu Oct 20 10:29:45 2011
Trace dumping is performing id=[cdmp_20111020102945]
Thu Oct 20 10:29:49 2011
Sweep [inc][31653]: completed
Sweep [inc2][31653]: completed
Thu Oct 20 10:34:20 2011
Errors in file d:\oracle\diag\rdbms\ads\ads\trace\ads_ora_860.trc (incident=31645):
ORA-03137: TTC protocol internal error : [12333] [4] [195] [3] [] [] [] []
Incident details in: d:\oracle\diag\rdbms\ads\ads\incident\incdir_31645\ads_ora_860_i31645.trc
Thu Oct 20 10:34:21 2011
Oracle Version : 11.2.0.1.0
For errors like this you should involve oracle support. Unfortunately you do not mention what oracle release you are using. The error can be related to optimizer bind peeking. Depending on the oracle version different workarounds apply.
You have two ways to address this:
- upgrade to 11.2
- set oracle parameter
_optim_peek_user_binds = false
Of course underscore parameters should only be set if advised by oracle support
这篇关于没有更多的数据从套接字错误中读取的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!