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

ORA-12571:TNS:使用ASP.NET的数据包写入程序失败,asp.net,oracle11g,odp.net,system.data.oracleclient,Asp.net,Oracle11g,Odp.net,System.data.oracleclient,我的开发团队在针对Oracle 11g使用ASP.NET 3.5和4.0时遇到了许多ORA-12571:TNS:packet writer失败错误。这些错误发生的时间不一致,并且由许多应用程序生成。调用随机存储过程、数据包和内联SQL语句时会发生此异常。Oracle 11客户端安装在web服务器上。有些应用程序使用Microsoft System.Data.OracleClient连接到Oracle,有些应用程序使用Oracle提供的.NET组件(ODP.NET)。两个数据访问对象都出现相同的错

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

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

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

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)

我认为这是甲骨文中的一个错误。我在DBDataAdapter.Fill方法中遇到了许多问题,Oracle客户机在遇到内存错误时会遇到这些问题。我通过使用应用补丁6的11.2.0.2客户端解决了这个问题

如果搜索Oracle的支持站点,您将看到许多类似的问题


还要检查11g1/11g2客户端的“读保护内存”问题

另一种可能的解决方案是,您与Oracle数据库之间的防火墙认为您的连接已断开,并在您下方将其关闭。只有在尝试执行查询并获得ORA-12571错误时,您才会发现

这是由于连接在没有活动的情况下长时间打开造成的

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

这样做的结果是防火墙将看到网络活动,而不会关闭连接

SQLNET.EXPIRE_TIME=10

在安装elmah模块并能够分析异常后,我尝试:

  • 更改连接配置
  • 删除和/或更新服务器防火墙规则
  • 在服务器计算机上更新Oracle客户端
  • 上面的任何选项都解决了问题,但我忘记了我们正在使用的过时的提供程序(System.Data.OracleClient)。在我用ODP.NET的最新版本(Oracle.DataAccess)替换它之后,一切都开始完美地工作


    Obs:根据您的异常描述,您当前正在使用过时的提供商。

    谢谢您的建议。我将尝试在应用补丁6的情况下安装11.2客户端。我将在@dretzlaff17阶段解决相同的问题,如果您已经解决了,请说明您是如何解决的。也就是说,当执行带有in和out参数的SP时,我得到了错误,正如你提到的,它工作正常。希望你能尽快回复我的评论。该链接不存在,你能提供另一个吗?