Skip to content

Oracle ORA-01000 最大オープン・カーソル数を超えました。

Posted in Oracle, データベース関係, and 技術メモ


プログラムからOracleへ接続してデータを操作するロジックを組み、いざ実行!となった時にハマったエラーで「ORA-01000」がありました。
Oracleからエラーを吐いているいるけど、いろいろ調べると複合的なエラーの一部でした。
主にロジックが悪い(カーソルの開放し忘れなど・・・)ことによるリソースの枯渇が原因で、前段で
「ORA-00604: 再帰SQLレベル1でエラーが発生しました。」
が発生して
「ORA-01000: 最大オープン・カーソル数を超えました。」
でプログラムが停止していました。

ロジックの見直しは行うのですが、その前にOracleDBから情報を取得します。

★初期パラメータ「OPEN_CURSORS」最大カーソル数の確認

SQL> show parameters open_cursors;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     300

★初期パラメータ「OPEN_CURSORS」最大カーソル数の変更
300→1000

SQL> alter system set open_cursors = 1000;

SQL> show parameters open_cursors;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     1000

これでエラーは出なくなりましたが腑に落ちないのでロジックは別途見直し。
因みにどのセッションでどんなSQL文のカーソルがオープンされているかを調べるなら

SQL> SELECT SID, USER_NAME, SQL_TEXT FROM V$OPEN_CURSOR;

       SID USER_NAME
---------- ------------------------------
SQL_TEXT
------------------------------------------------------------
        27 SYSTEM
SELECT SID, USER_NAME, SQL_TEXT FROM V$OPEN_CURSOR

       133 SYSMAN
INSERT INTO mgmt_db_rollback_segs_ecm(AVEACTIVE, AVESHRINK,

       135 SYS
select 1 from obj$ where name='DBA_QUEUE_SCHEDULES'


       SID USER_NAME
---------- ------------------------------
SQL_TEXT
------------------------------------------------------------
       139 SYS
select   schedule_mode, start_calibrate, num_votes,   synced

       139 SYS
SELECT OBJOID, CLSOID,         (2*PRI +          DECODE(BITA

・
・
・
521行が選択されました。

意外にいっぱいあることがわかった・・・この情報をもとに引っかかっている未開放のリソースを開放できるように修正する。
がんばるか・・・。

 

Be First to Comment

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    CAPTCHA