8

我的开发团队在ORA-12571: TNS:packet writer failure针对 Oracle 11g 使用 ASP.NET 3.5 和 4.0 时遇到了许多错误。这些错误发生的时间并不一致,并且是由许多应用程序生成的。调用随机存储过程、数据包和内联 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)
4

3 回答 3

7

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

这是由于长时间打开连接而没有活动造成的。

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

这样做的结果是您的防火墙将看到网络活动并且不会关闭连接。

SQLNET.EXPIRE_TIME=10

ORA-12571: TNS:packet writer failure - 我必须解决的最困难的问题之一

于 2012-06-13T17:26:59.527 回答
1

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

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

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

于 2011-08-22T17:49:13.157 回答
0

在我安装了 elmah 模块并可以分析异常后,我尝试:

  1. 更改连接配置。
  2. 删除和/或更新服务器防火墙规则。
  3. 更新服务器机器上的 Oracle 客户端。

上述任何选项都解决了问题,但我忘记了我们正在使用的过时提供程序(System.Data.OracleClient) 。在我用最新版本的 ODP.NET (Oracle.DataAccess)替换它之后,一切都开始完美无缺。

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

于 2014-04-14T21:17:24.673 回答