1 Reply Latest reply: Mar 9, 2012 3:20 AM by 922045 RSS

    ODP.NETを用いたコネクションプーリングでエラー

    922045
      こんにちは、はじめまして。

      VisualStudio2008 SP1、ASP.NET、Oracle10gの環境で社内向けの業務サイトを作成しております。
      大まかな処理内容はサーバー内に存在するテキストファイルから、PDFファイルを作成する処理です。
      また、それらの処理結果を確認する画面があり、1分毎にページ更新を行なっており、業務時間中は常に表示しております。
      現時点での利用人数は約5人で、今後は更に増える予定です。
      その処理において、以下のエラーが高い頻度で発生します。エラーは以下のようなものが出力されております。
      エラーの発生箇所は固定ではなく、コネクション確立後の何かしらデータの抽出時に発生しているようで、
      一度エラーが発生した後、再度同じ処理を行うと正常に完了します。

      =============================================================
      例外の種類: InvalidOperationException
      例外メッセージ: この操作に対して接続がオープンされている必要があります。

      例外の種類: OracleException
      例外メッセージ: 接続要求がタイムアウトしました。

      例外の種類: OracleException
      例外メッセージ: 接続要求がタイムアウトしました。
      =============================================================

      Oracleへの接続にはコネクションプーリングを行なっており、エラーの内容から恐らくその辺りが原因かと思っております。
      コネクションはGlobal.aspx内の「Application_BeginRequest」イベントにてOpenし、「Application_EndRequest」イベントにてCloseしています。
      処理中はGlobal変数にコネクションを格納し、各プログラムより随時使用しております。
      なお、ConnectionStringに使用しているパラメータは以下のようになります。

      =============================================================
      User Id =
      Password =
      Data Source =
      Pooling = true
      Min Pool Size = 1
      Max Pool Size = 100
      Incr Pool Size = 5
      Decr Pool Size = 1
      Connection Lifetime = 0
      =============================================================

      コネクション絡みの問題かと睨んでおりますが、解決法が解らず困っております。
      宜しくお願い致します。
        • 1. Re: ODP.NETを用いたコネクションプーリングでエラー
          922045
          自己レスです。

          負荷テストを行なっているうちに、5台~でアクセスを行った際に、このエラーが発生しやすい事が判明致しました。
          また、先日の情報には無かったのですが、接続文字列に「Connection Timeout=0」で設定されていることがわかりました。
          そのため、このパラメータを「60」に設定したところ、エラーが起こらなくなっていたのですが、つい先程エラーが再発しました。
          しかし、発生の頻度自体はかなり下がっているため、OracleConnection絡みであるということは間違いないようです。

          これまでの調査結果からして、どうにもプールが拡張されていない?もしくは、プールに存在するコネクションが破棄されたままの状態で使用しようとしている感じが致します。
          また、調査の過程においてODP.NETのトレースログを出力するため、レジストリを以下のように変更したのですが、一向に出力されません。
          これは、プールが使用されていないということなのでしょうか?

          =============================================================
          TraceFileName = odp2trc.trc
          TraceLevel = 2
          =============================================================

          Edited by: user13818628 on 2012/03/09 1:20