- PR -

ORA-01000とOracleのカーソルについて

1
投稿者投稿内容
naomix
ベテラン
会議室デビュー日: 2003/02/01
投稿数: 56
投稿日時: 2004-11-04 18:41
ASP.NETとOracleで開発していますが、
「ORA-01000 最大オープン・カーソル数を超えました。」
が出た場合、何に着目してデバッグしたらよいのでしょうか。
まずは、コネクションをクローズしてないところはないかどうか、
調べてるのですが、他にあるでしょうか。

そもそも、カーソルは、どの場合、何個オープンして、いつクローズするのでしょうか。
たとえばDataReaderを使う場合は、カーソルが1個オープンされて、
コネクションをクローズしたら、カーソルもクローズされると
考えていいのでしょうか。
それから、
更新系の場合も、カーソルって使うのでしょうか。
naomix
ベテラン
会議室デビュー日: 2003/02/01
投稿数: 56
投稿日時: 2004-11-04 23:39
実際に開かれているカーソルの数を確認しながら、
試行錯誤しているうちに、おぼろげにわかってきました。

OracleDataReaderを使っている処理は、
その処理をやると、やるたびにカーソル数が1個ずつ増えていきました。
OracleDataAdapterにFillする場合はそうはなりません。
そこで、DataReaderを使っているところを良く見てみると、
コネクションのクローズはしていますが、DataReaderのクローズはしていません。
よもやと思って、DataReaderのクローズを入れてみました。
そうしたら、カーソル数が増えることはなくなりました。

コネクションをクローズすれば、DataReaderもクローズされるものと私は思っていたのですが、
それは、SQL Server.NETプロバイダや、OLE DB.NETプロバイダの場合であって、
Oracle.NETプロバイダの場合は違うんですかね。

今回の開発では、ODBC.NETプロバイダも使っているのですが、
こちらもDataReaderのクローズは入れていません。しかしカーソル数は増えませんでした。

Oracleだけそうなんですか?
コネクションプールとのからみですかね。
私の認識や使い方が間違っていますでしょうか。
1

スキルアップ/キャリアアップ(JOB@IT)