0

私は直面している

ORA-01000: 開いているカーソルの最大数を超えました

IIS で ASP Web ページをホストした後。Visual Studio で Web ページをテストするとき。開いているカーソルの最大数を超えた問題は発生しません。

  1. 問題の原因と解決方法
  2. Oracle 接続を閉じて破棄すると、開いているカーソルは自動的に閉じられますか? そうでない場合、どうすればそれらを閉じることができますか?

接続を閉じて破棄するために使用するコード

rdr.Close()
rdr.Dispose()
cmd.Connection.Close()
cmd.Connection.Dispose()
For Each para As OracleParameter In cmd.Parameters
    para.Dispose()
Next
cmd.Dispose()
con.Close()
con.Dispose()

私の使い方は正しいですか?

4

5 に答える 5

2

他の回答への回答に基づいて、問題はIIS Webサーバーがデータベース接続に接続プールを使用している可能性が最も高いです。接続プールは多数の接続を作成し、データベースの観点からは、接続を長時間開いたままにします。これは、ページを表示する時間に比べて、データベース接続を開くのに時間がかかるという仮定が行われているためです。

IIS の構成を確認し、接続プールを無効にする (推奨されません) か、プール サイズを小さくする必要があります。

于 2013-01-04T05:17:08.457 に答える
0

投稿したコードが完全ではないため、aspを正しく使用しているかどうかはわかりません。ただし、open_cursors init.oraパラメータは、データベースセッションで一度に開くことができるカーソルの数を決定します。カーソルがリークしているかどうか、またはパラメータの設定が低すぎるかどうかを判断するには、最初のステップは、init.oraパラメータopen_cursorsの現在の値を判断することです。

開いているカーソルを判別する(閉じるのを忘れている可能性がある)。ビューv$open_cursorを使用できます。

于 2013-01-04T03:50:47.450 に答える
0

OracleCommand を破棄します。

OracleCommand cmd = new OracleCommand();
cmd.Dispose();

ただし、OracleDataReader を破棄して閉じる必要もあります。

OracleDataReader DataReader = Util.ExecuteDataForQuery(); // this returns the OracleDataReader object
// use it for your purpose
DataReader.Close();
DataReader.Dispose();
于 2016-11-30T17:28:48.527 に答える
0

コードを追加せずにここで何が起こっているのかを確実に言うのは難しいですが、私は推測することができ ます.接続を適切に閉じていません!

データベース接続に関して .Close() または .Dispose() への手動呼び出しが見られる場合、これらの呼び出しはブロック内に配置する必要があります (優先的には、ステートメントfinally用に作成された暗黙の finally ブロック)。usingそうしないと、データベース コードによって例外がスローされた場合、.Close() 呼び出しをスキップして、接続が開いたままになり、最大オープン カーソルの問題などに対して脆弱になります。

次のようになります。

using (var con = new OracleConnection(...))
using (var cmd = new OracleCommand(" sql here ", con))
{
    cmd.Parameters.Add( ... ).Value = ...

    using (var rdr = cmd.ExecuteReader())
    {
        while (rdr.Read())
        {
            //...
        }
    }
}

そこにあるいくつかのことをスキップしたことは知っていますが(...)、それが要点です。.Close() または .Dispose() への呼び出しをスキップしませんでした。ブロックが自動的にusing処理してくれます。

于 2013-01-04T04:15:34.260 に答える