ORA-12571:TNS:使用ASP.NET的数据包写入程序失败

dre*_*f17 8 asp.net odp.net oracle11g system.data.oracleclient

我的开发团队ORA-12571: TNS:packet writer failure使用ASP.NET 3.5和4.0对Oracle 11g 遇到了很多错误.这些错误在它们何时发生时是不一致的,并且由许多应用程序生成.调用随机存储过程,数据包和内联SQL语句时会发生此异常.Oracle 11客户端安装在Web服务器上.某些应用程序使用Microsoft System.Data.OracleClient连接到Oracle,有些应用程序使用oracle(ODP.NET)提供的.NET组件.两个数据访问对象都会出现相同的错误.

还有其他非.NET应用程序在不同的Web服务器上运行,但使用相同的数据库服务器.这些应用程序没有任何此类问题.我最初的想法是,使用Oracle客户端在Web服务器上配置错误.

有没有其他人收到此错误?你做了什么修复它?

ORA-12571: TNS:packet writer failure
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪:

at System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorHandle, Int32 rc)
   at System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, Boolean needRowid, OciRowidDescriptor& rowidDescriptor, ArrayList& resultParameterOrdinals)
   at System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, ArrayList& resultParameterOrdinals)
   at System.Data.OracleClient.OracleCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.OracleClient.OracleCommand.ExecuteDbDataReader(CommandBehavior behavior)
   at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable)
Run Code Online (Sandbox Code Playgroud)

Jor*_*ean 7

另一种可能的解决方案是,您和Oracle数据库之间的防火墙认为您的连接已关闭并在您下方关闭它.您只会在尝试执行查询并获取ORA-12571错误时找到答案.

这是因为连接打开很长时间而没有活动.

解决方案是将SQLNET.EXPIRE_TIME添加到服务器上的sqlnet.ora文件中,并将其设置为某个时间间隔(10).这将导致连接每10分钟被ping一次,以确保它们仍然存活.

结果是您的防火墙将看到网络活动而不关闭连接.

SQLNET.EXPIRE_TIME=10
Run Code Online (Sandbox Code Playgroud)

ORA-12571:TNS:数据包写入失败 - 我必须解决的最困难的问题之一


tse*_*lls 1

我认为这是 Oracle 中的一个错误。我遇到了 DBDataAdapter.Fill 方法的许多问题,其中 Oracle 客户端会因内存错误而阻塞。我通过使用应用了补丁 6 的 11.2.0.2 客户端解决了这个问题。

如果您搜索 Oracle 的支持站点,您会看到很多类似的问题。

另请检查 11g1 / 11g2 客户端的“读受保护内存”问题。