我的开发团队在使用Oracle3.5和4.0对抗Oracle11g时遇到了许多ORA-12571: TNS:packet writer failure
错误。这些错误在何时发生是不一致的,并且是由许多应用程序生成的。此异常发生在调用随机存储过程、数据包和内联SQL语句时。Oracle 11客户端安装在web服务器上。一些应用程序使用微软System.Data.OracleClient连接到甲骨文,另一些应用程序使用甲骨文(ODP.NET)提供的.NET组件。两个数据访问对象都会产生相同的错误。
还有其他非.NET应用程序运行在不同的web服务器上,但使用相同的数据库服务器。这些应用程序没有任何这样的问题。我最初的想法是,web服务器上的Oracle客户端配置不正确。
还有其他人收到过这个错误吗?你做了什么来修复它?
ORA-12571: TNS:packet writer failure
堆栈跟踪:
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)
发布于 2012-06-13 17:26:59
另一种可能的解决方案是,您与Oracle数据库之间的防火墙认为您的连接已死,并关闭了您下面的连接。只有在尝试执行查询并获得ORA-12571错误时才会发现。
这是由于连接打开很长时间而没有活动所造成的。
解决方案是将SQLNET.EXPIRE_TIME添加到服务器上的sqlnet.ora文件,并将其设置为某个间隔(10)。这将导致连接每10分钟被点击一次,以确保它们仍然活着。
这样做的结果是防火墙将看到网络活动,而不会关闭连接。
SQLNET.EXPIRE_TIME=10
发布于 2014-04-14 21:17:24
在安装了elmah模块并分析了异常之后,我尝试:
上面的任何选项都解决了这个问题,但我忘记了我们正在使用的过时的提供者(System.Data.OracleClient)。在我用ODP.NET (Oracle.DataAccess)的最后一个版本替换了它之后,一切都开始完美地运作起来。
基于您的异常描述,您目前正在使用过时的提供程序。
https://stackoverflow.com/questions/7151175
复制相似问题