問題タブ [ora-03113]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - ASP.NET での OracleException ODP.NET の ORA-03113
ASP.NET Web サイトで ODP.NET を使用しています。
環境: Windows Server 2008R2Oracle.DataAccess, Version=4.112.2.0
上のODP.NET 。IIS7.5
問題:
ときどき、ODP.NET Oracle 接続が ORA-03113 エラーで終了します。イベントのシーケンスは次のとおりです。
Oracle 接続が確立され、接続が開かれます
プロシージャ/関数/SQL ステートメント ( ge: など
OracleCommand.ExecuteNonQuery
) の実行時に接続を使用すると、ORA-03113 エラーが発生します。
ORA-03113: 通信チャネルでファイルの終わりです。プロセス ID: 1660 セッション ID: 266 シリアル番号: 61873
ExceptionType: Oracle.DataAccess.Client.OracleException、Oracle.DataAccess、バージョン = 4.112.2.0、カルチャ = ニュートラル、PublicKeyToken = 89b483f429c47342
ブログ、サイト、およびフォーラムで、接続プールを無効にするとこの問題が解決することを読みました。試していないのでわかりません。それが回避策であり、機能している場合。しかし、パフォーマンスが低下するため、これを行いたくありません。
Microsoft.Practicesの Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery()で Oracle.DataAccess.Client.OracleException.HandleErrorHelper (Int32 errCode、OracleConnection conn、IntPtr opsErrCtx、OpoSqlValCtx * pOpoSqlValCtx、オブジェクト src、文字列プロシージャ、ブール bCheck)で
。 EnterpriseLibrary.Data.Database.DoExecuteNonQuery (DbCommand コマンド)
で Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteNonQuery (DbCommand コマンド)
で COMPANY.Frk.Data.OracleClient.Command.DoExecuteNonQuery()
で COMPANY.Frk.Data.OracleClient.
COMPANY.Frk.Data.OracleClient.Command.ExecuteStoredFunction() でのCommand.ExecuteNonQuery()
COMPANY.B2b.Services.GD.DAL.Login.CheckUser(Int32 companyid、文字列ログイン、文字列パス)
任意の Oracle ドキュメントで:
ORA-03113: 通信チャネルのファイルの終わり 原因: クライアントとサーバーのプロセス間の接続が切断されました。外部エージェント extproc が何らかの理由でクラッシュした場合にも発生する可能性があります。
処置: さらに調査する必要がある通信エラーが発生しました。まず、ネットワークの問題をチェックし、SQL*Net のセットアップを確認します。また、エラーがないか、alert.log ファイルを調べます。最後に、サーバー プロセスが停止しているかどうか、および障害発生時にトレース ファイルが生成されたかどうかをテストします。.NET 関数には、プロセスを終了させる可能性のあるシステム コールが含まれている場合があります。そのような呼び出しを削除します。
それに関する提案とトラブルシューティングはありますか?
更新しました:
Max Pool Size=300;Connection Timeout=30
IT 部門が接続文字列の属性を変更したと思います。
ODP.NET 構成を使用したトラブルシューティング- トレースおよびパフォーマンス カウンター。
1.WCF トレース (WCF サービスがある場合)
2.ODP.NET パフォーマンス カウンター
3.ODP.NET トレース (レジストリまたは XML) (Oracle のドキュメントでは、C# コードを使用しているとも言いませんか?)
を。TraceLevel (文字列)
b. TraceFileName (文字列) – トレースをダンプするパスとファイル名
c. TraceOutput (文字列) – 単一ファイルの場合は 0、複数ファイルの場合は 1
4: パフォーマンス カウンター。perfmon カウンターの有効化/設定
これは、アプリごと (またはホーム ディレクトリごと、マシンごとなど) に行われます。私が見た最高の記事はここにあります: http://blog.ilab8.com/2011/09/02/odp-net-pooling-and-connection-request-timed-out
それらは特に便利です:
NumberOfActiveConnectionPools
NumberOfActiveConnections
NumberOfFreeConnections
NumberOfInactiveConnectionPools
NumberOfNonPooledConnections
NumberOfPooledConnections
NumberOfReclaimedConnections
NumberOfStasisConnections「また、ODP.NET を完全に管理してトレースする場合は、レジストリではなく、アプリまたは Web 構成ファイル内に設定を配置する必要があり、TraceLevel の設定が異なる (1 から 7) ことにも注意してください。そして最後に、管理されていない ODP.NET をトレースするときは、32 ビット Windows 用に別個の WOW レジストリ ノードがあることに注意してください。アプリが 32 ビットの場合は、誤ってレジストリの 64 ビット部分の下に設定しないでください。
OracleConnection クラス - サポートされている接続文字列属性 https://docs.oracle.com/html/B10961_01/client4.htm#1000348
「IIS のアプリケーション プールは、「ワーカー プロセスの最大数」がデフォルトの 1 とは異なる設定になるように構成されていました。ワーカー プロセス。
したがって、最大プール サイズが 5 でワーカー プロセスが 5 の場合、許可される接続の総数は 25 です。そのため、各ワーカー プロセスには、他のワーカー プロセス間で共有されない接続プールの独自のインスタンスがあるようです。
接続プールはアプリケーション ドメインごとのワーカー プロセスごとであるため、最大プール サイズは 5 * 5 ワーカー プロセス * 各ドメイン 2 = 50 接続であることに注意してください。
参考文献:
11g リリース 1 (11.1.0.6.20) http://docs.oracle.com/html/E10927_01/featConfig.htm
11g リリース 2 (11.2) http://docs.oracle.com/cd/E11882_01/win.112/e23174/featConfig.htm#ODPNT155
http://webiv.oraclecorp.com/cgi-bin/webiv/do.pl/Get?WwwID=note:730678.1#接続が見つかりません
Oracle Data Provider for .NET のベスト プラクティス https://nvtechnotes.wordpress.com/2009/04/13/oracle-data-provider-for-net-best-practices/
2. perfmon カウンターの有効化/構成 これは、アプリごと (またはホーム ディレクトリごと、マシンごとなど) に行われます。私が見た最高の記事はここにあります: http://blog.ilab8.com/2011/09/02/odp-net-pooling-and-connection-request-timed-out
特に、32 ビット アプリの特定の手順と、操作のインストール/構成/起動の順序に注意してください。
1.perfmon カウンターのインストール まだインストールされていない場合は、次の手順に従ってください: http://blog.bekijkhet.com/2010/01/odpnet-performance-counters-do-not-show.html
ODP.Net ログを有効にする http://blogs.msdn.com/b/biztalknotes/archive/2013/03/14/collecting-troubleshooting-data-for-wcf-oracle-adapter.aspx
https://collecteddotnet.wordpress.com/2009/05/29/understanding-connection-pooling/ http://www.codeguru.com/csharp/.net/net_asp/article.php/c19395/Tuning-Up-ADONET -Connection-Pooling-in-ASPNET-Applications.htm http://oradim.blogspot.com.es/2008/02/experimenting-with-connection-pooling.html
接続の検証 = true
Validate Connection を使用すると、実際の接続は Open() メソッドで検証されます。
ただし、ドキュメントによると、フラグを設定するとパフォーマンスが低下します。 http://docs.oracle.com/html/E10927_01/featConnecting.htm この属性は、アプリケーションに提供される直前に各接続を検証するデータベース。