• ベストアンサー

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

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

  • セッションが残ってしまう。

    Javaサーブレットと、Oracle8iを使って、 C/S系のシステム開発をしています。 Javaサーブレットで、JDBCを使用してOracleへ接続しているのですが、 セッションが、残っていることに気が付きました。 原因は、何でしょうか? また、残ったセッションを消す用法を教えて下さい。 Oracle DBA Studioでセッションの切断を選択しても、 ずっと残っています。 是非ご教授下さい。

  • JavaからOracleを呼ぶ。(JDBCドライバの利用方法)

    色々調べましたが分からないので質問させてください。よろしくお願いします。 JavaからOracleを使いたくて、JDBCドライバのことを調べています。 Oracle(のClient)がインストールされた私のパソコン ↓ D:\oracle\ora92\jdbc\lib\classes12.zip\oracle\jdbc\driver\OracleDriver.class まず、コマンドプロンプトにてクラスパスを通しました。 C:\java > set CLASSPATH = D:\oracle\ora92\jdbc\lib\classes12.zip (↑CのjavaフォルダにSqlTest.javaを作成しています。) コンパイルは成功しましたが、実行はできません(;_;) java.lang.ClassNoClassDefFoundError: SqlTest というエラーです。 詳しい方、どうかご教授よろしくお願いします。

    • ベストアンサー
    • Java
  • Oracle8i に接続しようと思うんですが、エラーが出ます。

    Oracle 8i に接続したいと思い、 C:\Oracle\Ora81\jdbc\lib に classes12.zip を置いています。 クラスパスの設定は、C:\Oracle\Ora81\jdbc\lib\classes12.zip としています。classes12 は oracle 9i 用を使っています。 ちなみに、OSはWin2000professional です。 // JDBC ドライバの登録 DriverManager.registerDriver( new oracle.jdbc.driver.OracleDriver() ); とすると、 Exception in thread "main" java.lang.NoClassDefFoundError: oracle/jdbc/driver/Or acleDriver at DbTest.main(DbTest.java:16) のエラーが出て、 Class.forName("oracle.jdbc.driver.OracleDriver");  とすると、 java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClassInternal(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at DbTest.main(DbTest.java:19) というエラーが出ます。 誰かわかる人がいたら、教えてください.よろしくお願いします。

    • ベストアンサー
    • Java
  • oracle9iにJDBC接続が出来ない

    oracle9iにJDBCで接続したいのですがI/O例外が出てうまくいきません。 多分、DriverManager.getConnection の引数のURLが間違っているのだと思うのですが。 jdbc:oracle:thin:@<ホスト名>:<リスナのポート番号>:<Oracle SID> ホスト名・ポート番号・Oracle SID はどこを見ればわかるのでしょうか? ちなみに出ているエラーは以下のとうりです。 Exception in thread "main" java.sql.SQLException: I/O例外です。: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=150999297)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4)))) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:222) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:335) at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:361) at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:442) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:321) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at JavaDataAccess01.main(JavaDataAccess01.java:13) 何か参考になるHPなどあれば教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Oracle8i に接続しようと思うんですが、エラーが出ます。 その2

    2度目です。すみません。 先ほどの問題は解決できたのですが、今度は別のエラーがでてしまいます。 java.sql.SQLException: I/O例外です。: The Network Adapter could not establish th e connection at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:222) at oracle.jdbc.dbaccess.DBError.throwSqlException ソースは以下のとおりで、Connection conn のところで、エラーが出ます。 public class DbTest{ // [ jdbc:oracle:thin:@ + "IP or コンピュータ名(NETBIOS名)" + ":" + ポート + ":" + "DB名" ] private static String DATABASE_URL = "jdbc:oracle:thin:@ksr01-d:1521:ksroracle"; private static String DATABASE_USER = "ksr"; private static String DATABASE_PASS = "ksr"; public static void main(String[] arg ){ System.out.println("STRAT"); try{ // JDBC ドライバの登録 DriverManager.registerDriver( new oracle.jdbc.driver.OracleDriver() ); String drName = "oracle.jdbc.driver.OracleDriver"; Connection conn = DriverManager.getConnection( DATABASE_URL, DATABASE_USER, DATABASE_PASS ); Oracle SQL*Plus を起動してから、実行しています. 事務所に、java の出来る人がいなく、oracle に詳しい人もいなく、上司が、絶対作れといってきて大変困っています。 誰かわかる人がいたら、教えてください。すみませんが,よろしくお願いします.

    • ベストアンサー
    • Java
  • JavaでのOracle接続について(JDBC)

    はじめまして。 先週よりJavaの勉強を始めていまして 先日からDB接続(Oracle)をやっているのですが、Oracleに接続することが出来ません。色々なサイトからクラスパスが通っていないというエラーのようなのですが、プログラミング経験のある友人に聞いてもさっぱり原因が分かりません。また何度もインストールをやり直して同じです。以下に環境とソースを載せておきますので、もし何か解決のヒントになるような事がありましたら教えて下さい。 ●状況 (1)コンパイルは通るがjavaコマンドで実行をすると”Exception in thread "main" java.lang.ClassNotFoundException: oracle.jdbc.driveOracleDriver”が出てしまう。 (2)C:\oracle\ora92\jdbc\lib\ojdbc14.jarを環境変数→Pathへしっかりと通してあります。(setコマンドでも確認済みです) (3)C:\j2sdk1.4.1_02\jre\lib\extへojdbc14.jarをコピー (4)SQL PLUSからは接続出来る。 ●環境 クライアント:Win2000 DBサーバー:SQLサーバー(別マシンに環境構築) DB:Oralce9.2.0 JDK:1.4.1_02 import java.sql.*; class Employee { public static void main (String args []) throws SQLException,ClassNotFoundException { // Oracle JDBC Driverのロード Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@ホスト名:1521:SID", "ID", "パスワード"); Statement stmt = conn.createStatement (); ResultSet rset = stmt.executeQuery ("SQL"); while (rset.next ()) System.out.println (rset.getString ("ISBN")); rset.close(); conn.close(); } } 以上です。何か足りない情報がありましたら教えて下さい。

  • データベースをオープンできない

    Oracle(10.2.0.5)のパッチを当てた後、データベースをオープンすることができませんでした。 原因と対処法にについてわかりましたら、教えて頂けますか。 SQL> startup ORACLEインスタンスが起動しました。 Total System Global Area 1258291200 bytes Fixed Size 2067624 bytes Variable Size 318767960 bytes Database Buffers 922746880 bytes Redo Buffers 14708736 bytes データベースがマウントされました。 ORA-01092: Oracleインスタンスが終了しました。強制的に切断されます

  • サーブレットは動くがJSPだけ動かない

    Servlet/JSPでの開発をTomcatで行っているのですが、webapps/examples/jspの JSPサンプルが起動しませんでした。Internal Servlet Error 500が返されてしまい ます。 開発環境 Windows 2000 Java2 SDK 1.3 Jakarata Tomcat 3.2.1 環境変数 TOMCAT_HOME=C:\jakarta-tomcat-3.2.1 JAVA_HOME=C:\jdk1.3 PATH=%PATH%;C:\jdk1.3\bin CLASSPATH=%CLASSPATH%;C:\jakarta-tomcat-3.2.1\lib\servlet.jar 気になるのは、Oracle8iのトライアル版をインストールして いる点です。Oracleをインストールすると以下のような環境変数が設定されます。 Oracleインストール後の環境変数Path Path=C:\Oracle\Ora81\bin;C:\Program Files\Oracle\jre\1.1.7\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\jdk1.3\bin;C:\Oracle\Ora81\orb\bin 1.1.7のjreがかなり怪しいとは思うのですが。 もう一度、質問をまとめてみます。 ・exampleサーブレットは動くが、example JSPだけが動かないのはどうしてでしょう? ・とにかくJSPだけを動かしたいのですが、方法はあるでしょうか?  (JDBC接続を行うため、Oracleは削除できないという前提で) 皆様の知恵をお貸しください。

    • ベストアンサー
    • Java
  • javaサーブレットとmysqlと接続で困ってます

    参考書見ながらjava サーブレットの勉強してるんですがmysqlと繋ぐのに苦戦しています。 プロジェクトのwebcontentのweb-infのlibにJDBCを入れたのですが、こんなエラーがでます。 java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/sample_db?useUnicode=true&characterEncoding=utf8 これはパスの設定がされてないからでしょうか?

    • ベストアンサー
    • Java
  • Oracle Database 10g Express Editionを使いたい

    と思いDLしてインストールして SQLPLUSで ユーザ:usr1 パスワード:psswd1 でOracleに入り SQL> CREATE TABLE "PROJECT" ( "ID" NUMBER NOT NULL ENABLE, "PJNAME" VARCHAR2(100) NOT NULL ENABLE, CONSTRAINT "PROJECT_PK" PRIMARY KEY ("ID") ENABLE ) / 2 3 4 5 6 表が作成されました。 SQL> describe project; 名前 NULL? 型 ----------------------------------------- -------- ---------------------------- ID NOT NULL NUMBER PJNAME NOT NULL VARCHAR2(100) SQL> とテーブルを作り以下のJavaアプリを作り実行しましたが 動きませんでした。getConnectionの引数の "jdbc:oracle:thin:@localhost:1521:ORCL" の中のORCLの部分に何を入れてよいのか分からなかったので 根拠なしにORCLを使ったのが悪かったと思います。 ORCLの部分には何を入れたらいいのでしょうか? package pack; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JdbcTest { public static void main(String args[]) throws SQLException,ClassNotFoundException { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","usr1","psswd1"); Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("select ip,pjname from project"); while (rset.next()) { System.out.println(rset.getInt(1) + "\t" + rset.getString(2)); } rset.close(); stmt.close(); conn.close(); } } エラー:Exception in thread "main" java.sql.SQLException: Listener refused the connection with the following error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor The Connection descriptor used by the client was: localhost:1521:ORCL

    • ベストアンサー
    • Java