Exceptionjava.sql.SQLException: ORA-01000
열려있는 cursor 수가 최대 수가 되었을 때 더이상 열 수 없어 발생하는 에러.
원인 : 코드 중에 Statement나 ResultSet을 close 시켜주지 않았을 발생.
조치방법
- 임시적으로 ini_.ora 파일에 OPEN_CURSORS 값을 증가시킨다. (땜빵용)
- 증가시켜도 동일한 증상이 나타날 경우 코드상에 close 시켜주지 않는 부분을 수정해야 한다.
- 열려있는 cursor를 닫아준다.
열려있는 cursor 찾기와 닫기
- SYSTEM 계정으로 로그인 한다.
- 현재 데이터베이스의 cursor 제한 수를 확인한다.
show parameter open_cursors
보여지는 수와 거의 비슷하거나 같은 열린 cursor의 SID 값을 찾는다. - 커서 갯수를 확인한다.
SELECT COUNT(*) CNT, SID FROM v$OPEN_CURSOR GROUP BY SID ORDER BY CNT DESC ;
- 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값' ;
- SID와 SERIAL# 값을 사용하여 해당 세션을 삭제한다.
ALTER SYSTEM KILL SESSION 'SID값', 'SERIAL#값' ;