- ベストアンサー
最大オープン・カーソル数のエラー
javaサーブレットと、Oracle8iを使って、 C/S系のシステム開発をしています。 Javaサーブレットで、JDBCを使用してOracleへ接続しているのですが、 時々、以下のような、エラーが発生します。 Java.sql.SQLException: ORA-01000: 最大オープン・カーソル数を超えました。 原因は、何でしょうか? 最大オープン・カーソル数の個数を調べるには、どこを見ればいいのでしょうか? 是非ご教授下さい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Statementを作るだけ作ってclose()を呼んで閉じていないせいだと思います。 ResultSetにしてもStatementにしてもちゃんとclose()を呼ばないのは 非常にお行儀が悪いです。(java.ioクラスもそうですが) ちなみにOracleの最大オープンカーソルはデフォルトで40数コだったような・・・ (あいまいですいません) --データベース・エラー・メッセージ 抜粋-- ORA-01000 最大オープン・カーソル数を超過しました 原因: ホスト言語プログラムがオープンしようとしているカーソルの数が多すぎます。 1 ユーザー当たりのカーソルの最大数は、初期化パラメータOPEN_CURSORS によって 決定されています。 処置: プログラムを変更して、使用するカーソルの数を減らしてください。繰り返しエ ラーが発生する場合は、Oracle を停止して、OPEN_CURSORS の値を大きくしてから、 Oracle を再起動してください。
その他の回答 (2)
- takataka111
- ベストアンサー率46% (23/50)
Oracleの設定から少し回答しますと カーソルの設定値はinit.ora ファイルの中の #一つのセッションで同時にオープンできるカーソルの最大値 OPEN_CURSORS = 200 で設定されています。ちなみに最大値は200です。 以上ご参考まで。
- ct27
- ベストアンサー率62% (48/77)
あ、ちなみにConection#close()やStatement#close()を呼ぶと自動的にResultSetも閉じます。 個人的にはプログラム上ResultSet#close()をすぐに呼ぶ必要がある場合も ない場合も必ずResultSet#close()を呼ぶようにしています。 参考まで・・・
お礼
Statement、ResultSetに関しては、全部チャックしたのですが、 java.ioに関しては、見直していませんでした。 また、Statementをclose()したので、ResultSetはclose() しなくてもいいかとしたところがありました。 早速、見直します。