【oracle】ORA-01000:最大オープン・カーソル数を超えましたの対処方法
ORA-01000:最大オープン・カーソル数を超えましたの対処方法について
原因
カーソルオープンした数が、初期化パラメータOPEN_CURSORSの設定値を超えた場合に発生するエラー。
OPEN_CURSORSの設定値を確認するSQL。
SELECT name, value
FROM v$parameter
WHERE name = 'open_cursors';
OPEN_CURSORSは1セッションで開くことのできるカーソルの上限値。
ORA-01000が発生した場合、特定のセッションの処理に問題がある。
発生要因と対策
プログラムのバグの可能性が高い。
- カーソルのクローズをしていない
- 大量のカーソルを一度にオープンしてしまう
要件として必要な場合を除き、これらのコードを書くのは避けるべき。
どうしても必要な場合はOPEN_CURSORSの値を変更する。
ただし、1セッションの処理が重くなることによる全体の影響は考慮に入れる必要がある。
OPEN_CURSORSの設定値を変更するSQL。
ALTER SYSTEM SET OPEN_CURSORS = <新しい値> SCOPE = BOTH;
SCOPEにBOTHを指定することで、現在のセッションとDB再起動後に変更が反映される。
他のセッションにも反映させたい場合、DBを再起動する必要がある。