ちょっと先の未来クイズ第4問

javaサーブレットと、Oracle8iを使って、
C/S系のシステム開発をしています。

Javaサーブレットで、JDBCを使用してOracleへ接続しているのですが、
時々、以下のような、エラーが発生します。

Java.sql.SQLException: ORA-01000: 最大オープン・カーソル数を超えました。

原因は、何でしょうか?
最大オープン・カーソル数の個数を調べるには、どこを見ればいいのでしょうか?

是非ご教授下さい。

A 回答 (3件)

Statementを作るだけ作ってclose()を呼んで閉じていないせいだと思います。


ResultSetにしてもStatementにしてもちゃんとclose()を呼ばないのは
非常にお行儀が悪いです。(java.ioクラスもそうですが)
ちなみにOracleの最大オープンカーソルはデフォルトで40数コだったような・・・
(あいまいですいません)

--データベース・エラー・メッセージ 抜粋--
ORA-01000 最大オープン・カーソル数を超過しました
原因: ホスト言語プログラムがオープンしようとしているカーソルの数が多すぎます。
1 ユーザー当たりのカーソルの最大数は、初期化パラメータOPEN_CURSORS によって
決定されています。
処置: プログラムを変更して、使用するカーソルの数を減らしてください。繰り返しエ
ラーが発生する場合は、Oracle を停止して、OPEN_CURSORS の値を大きくしてから、
Oracle を再起動してください。
    • good
    • 1
この回答へのお礼

Statement、ResultSetに関しては、全部チャックしたのですが、
java.ioに関しては、見直していませんでした。

また、Statementをclose()したので、ResultSetはclose()
しなくてもいいかとしたところがありました。

早速、見直します。

お礼日時:2002/07/15 16:19

Oracleの設定から少し回答しますと


カーソルの設定値はinit.ora ファイルの中の

#一つのセッションで同時にオープンできるカーソルの最大値
OPEN_CURSORS = 200

で設定されています。ちなみに最大値は200です。

以上ご参考まで。
    • good
    • 0

あ、ちなみにConection#close()やStatement#close()を呼ぶと自動的にResultSetも閉じます。


個人的にはプログラム上ResultSet#close()をすぐに呼ぶ必要がある場合も
ない場合も必ずResultSet#close()を呼ぶようにしています。
参考まで・・・

参考URL:http://java.sun.com/j2se/1.4/ja/docs/ja/guide/jd …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報