• ベストアンサー

最大オープン・カーソル数のエラー

javaサーブレットと、Oracle8iを使って、 C/S系のシステム開発をしています。 Javaサーブレットで、JDBCを使用してOracleへ接続しているのですが、 時々、以下のような、エラーが発生します。 Java.sql.SQLException: ORA-01000: 最大オープン・カーソル数を超えました。 原因は、何でしょうか? 最大オープン・カーソル数の個数を調べるには、どこを見ればいいのでしょうか? 是非ご教授下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • ct27
  • ベストアンサー率62% (48/77)
回答No.1

Statementを作るだけ作ってclose()を呼んで閉じていないせいだと思います。 ResultSetにしてもStatementにしてもちゃんとclose()を呼ばないのは 非常にお行儀が悪いです。(java.ioクラスもそうですが) ちなみにOracleの最大オープンカーソルはデフォルトで40数コだったような・・・ (あいまいですいません) --データベース・エラー・メッセージ 抜粋-- ORA-01000 最大オープン・カーソル数を超過しました 原因: ホスト言語プログラムがオープンしようとしているカーソルの数が多すぎます。 1 ユーザー当たりのカーソルの最大数は、初期化パラメータOPEN_CURSORS によって 決定されています。 処置: プログラムを変更して、使用するカーソルの数を減らしてください。繰り返しエ ラーが発生する場合は、Oracle を停止して、OPEN_CURSORS の値を大きくしてから、 Oracle を再起動してください。

pikodon
質問者

お礼

Statement、ResultSetに関しては、全部チャックしたのですが、 java.ioに関しては、見直していませんでした。 また、Statementをclose()したので、ResultSetはclose() しなくてもいいかとしたところがありました。 早速、見直します。

その他の回答 (2)

回答No.3

Oracleの設定から少し回答しますと カーソルの設定値はinit.ora ファイルの中の #一つのセッションで同時にオープンできるカーソルの最大値 OPEN_CURSORS = 200 で設定されています。ちなみに最大値は200です。 以上ご参考まで。

  • ct27
  • ベストアンサー率62% (48/77)
回答No.2

あ、ちなみにConection#close()やStatement#close()を呼ぶと自動的にResultSetも閉じます。 個人的にはプログラム上ResultSet#close()をすぐに呼ぶ必要がある場合も ない場合も必ずResultSet#close()を呼ぶようにしています。 参考まで・・・

参考URL:
http://java.sun.com/j2se/1.4/ja/docs/ja/guide/jdbc/getstart/resultset.html#1003662

関連するQ&A