Exceptionjava.sql.SQLException: ORA-01000

열려있는 cursor 수가 최대 수가 되었을 때 더이상 열 수 없어 발생하는 에러.

원인 : 코드 중에 Statement나 ResultSet을 close 시켜주지 않았을 발생.

조치방법

  1. 임시적으로 ini_.ora 파일에 OPEN_CURSORS 값을 증가시킨다. (땜빵용)
  2. 증가시켜도 동일한 증상이 나타날 경우 코드상에 close 시켜주지 않는 부분을 수정해야 한다.
  3. 열려있는 cursor를 닫아준다.

열려있는 cursor 찾기와 닫기

  1. SYSTEM 계정으로 로그인 한다.
  2. 현재 데이터베이스의 cursor 제한 수를 확인한다.
    show parameter open_cursors
    보여지는 수와 거의 비슷하거나 같은 열린 cursor의 SID 값을 찾는다.
  3. 커서 갯수를 확인한다.
    SELECT COUNT(*) CNT, SID
    FROM v$OPEN_CURSOR
    GROUP BY SID
    ORDER BY CNT DESC ;
  4. SID를 이용하여 SERIAL#을 구한다.
    SELECT A.SQL_TEXT, B.SERIAL#
    FROM V$OPEN_CURSOR C, V$SQL A, V$SESSION B
    WHERE A.HASH_VALUE = C.HASH_VALUE
    AND C.SID = B.SID
    AND ROWNUM < 10
    AND C.SID = 'SID값' ;
  5. SID와 SERIAL# 값을 사용하여 해당 세션을 삭제한다.
    ALTER SYSTEM KILL SESSION 'SID값', 'SERIAL#값' ;