linux ora-12570,ODP.net managed driver throws ORA-12570: Network Session: Unexpected packet read err...

本文讨论了一个在使用Oracle ODP.NET进行数据库查询时偶尔遇到的ORA-12570网络会话异常,涉及错误堆栈和可能的原因。寻求解决此随机出现且与具体存储过程和参数无关的问题,以及是否有已知的修复措施。

In one of our products we retrieve data from the Oracle database using stored procedures using the ODP.net managed driver.

Every now and then (roughly every 1000 queries) we get the following exception:

(ORA-12570: Network Session: Unexpected packet read error)

---> Oracle.ManagedDataAccess.Client.OracleException: ORA-12570: Network Session: Unexpected packet read error

---> OracleInternal.Network.NetworkException: ORA-12570: Network Session: Unexpected packet read error

---> System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.

Parameter name: size

at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags, SocketError& errorCode)

at OracleInternal.Network.ReaderStream.ReadIt(OraBuf OB, Int32 len)

--- End of inner exception stack trace ---

at OracleInternal.Network.ReaderStream.ReadIt(OraBuf OB, Int32 len)

at OracleInternal.Network.ReaderStream.WaitForReset()

at OracleInternal.Network.OracleCommunication.Reset()

at OracleInternal.TTC.TTCExecuteSql.ReceiveExecuteResponse(Accessor[]& defineAccessors, Accessor[] bindAccessors, Boolean bHasReturningParams, SQLMetaData& sqlMetaData, SqlStatementType statementType, Int64 noOfRowsFetchedLastTime, Int32 noOfRowsToFetch, Int32& noOfRowsFetched, Int64& queryId, Int32 longFetchSize, Int32 initialLOBFetchSize, Int64[] scnFromExecution, Boolean& bAllPureInputBinds, DataUnmarshaller& dataUnmarshaller, MarshalBindParameterValueHelper& marshalBindParamsHelper, Boolean bDefineDone, Boolean& bMoreThanOneRowAffectedByDmlWithRetClause)

--- End of inner exception stack trace ---

at Oracle.ManagedDataAccess.Client.OracleException.HandleError(OracleTraceLevel level, OracleTraceTag tag, Exception ex)

at OracleInternal.TTC.TTCExecuteSql.ReceiveExecuteResponse(Accessor[]& defineAccessors, Accessor[] bindAccessors, Boolean bHasReturningParams, SQLMetaData& sqlMetaData, SqlStatementType statementType, Int64 noOfRowsFetchedLastTime, Int32 noOfRowsToFetch, Int32& noOfRowsFetched, Int64& queryId, Int32 longFetchSize, Int32 initialLOBFetchSize, Int64[] scnFromExecution, Boolean& bAllPureInputBinds, DataUnmarshaller& dataUnmarshaller, MarshalBindParameterValueHelper& marshalBindParamsHelper, Boolean bDefineDone, Boolean& bMoreThanOneRowAffectedByDmlWithRetClause)

at OracleInternal.ServiceObjects.OracleCommandImpl.ExecuteNonQuery(String commandText, OracleParameterCollection paramColl, CommandType commandType, OracleConnectionImpl connectionImpl, Int32 longFetchSize, Int32 lobPrefetchSize, OracleDependencyImpl orclDependencyImpl, Int64[]& scnFromExecution, OracleParameterCollection& bindByPositionParamColl, Boolean& bBindParamPresent, Boolean isFromEF)

at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteNonQuery()

It seems like ODP.net is calling System.Net.Sockets.Socket.Receive with an invalid size parameter (<=0 or greater than the length of buffer minus the value of the offset parameter).

The exception cannot be reproduced manually and is never raised while executing different procedures with different parameters (ie it's random).

Configuration:

ODP.net managed driver version: 4.121.1.0

.net framework 4.5

Oracle server version: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 (Linux)

Has anyone already experienced this issue? Are there any fixes available?

Thanks in advance!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值