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) を使用するアプリケーションもあります。両方のデータ アクセス オブジェクトで同じエラーが発生します。

別の Web サーバー上で実行されているが、同じデータベース サーバーを使用する .NET 以外のアプリケーションが他にもあります。アプリにはそのような問題はありません。私の最初の考えは、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

もう 1 つの考えられる解決策は、ユーザーと Oracle データベースの間のファイアウォールが、接続が切断されたと判断し、接続を閉じてしまうことです。クエリを実行しようとして ORA-12571 エラーが発生したときにのみわかります。

これは、アクティビティがなく長時間接続が開いていることが原因です。

解決策は、SQLNET.EXPIRE_TIME をサーバー上の sqlnet.ora ファイルに追加し、一定の間隔 (10) に設定することです。これにより、接続がまだ有効であることを確認するために 10 分ごとに ping が実行されます。

この結果、ファイアウォールはネットワーク アクティビティを認識し、接続を閉じません。

SQLNET.EXPIRE_TIME=10

ORA-12571: TNS: パケット・ライターの失敗 - これまで解決しなければならなかった最も困難な問題の1つ

于 2012-06-13T17:26:59.527 に答える
1

これは Oracle のバグだと思います。DBDataAdapter.Fill メソッドで、Oracle クライアントがメモリ エラーで停止するという多くの問題に遭遇しました。これは、パッチ 6 が適用された 11.2.0.2 クライアントを使用することで解決されました。

Oracle のサポート サイトを検索すると、このような問題が多数見つかります。

11g1/11g2クライアントの「Read Protected Memory」の問題も確認してください。

于 2011-08-22T17:49:13.157 に答える