JAVA로 오라클에 들어 붙는 프로그램을 만들다 보면 이런 오류를 만나는 순간이 올 수도 있다.
ORA-01000 최대 열기 커서 수를 초과 하였습니다.
대게 스테이먼트나 리절트 셋을 클로즈를 안 해 주면 리미트에 도달 했을때 저런게 난 다는데
아래와 같이 다중으로 쿼리를 날릴 때 발생을 한 경우가 있다.
Satement stmt = null;
ResultSet rs_1 = null;
ResultSet rs_2 = null;
ResultSet rs_3 = null;
stmt = con.createStatement();
rs_1 = stmt.executeQuery("select * from table1);
rs_2 = stmt.executeQuery("select * from table2);
rs_3 = stmt.executeQuery("select * from table3);
stmt.close();
rs_1.close();
rs_2.close();
rs_3.close();
하란대로 클로즈를 다 해 줬는데 왜 그럴까..?
select * from v$open_cursor
으로 확인해 보면
select * from table1, select * from table2 쿼리가 안 날아가고 그대로 있는 걸 볼 수가 있다.
rs_1.close() , rs_2.close() 해 줬는데...
stmt를 돌려 먹으면 앞 쪽에 실행한 쿼리들은 커서가 안 닫히고 살아 있는 걸 체험 할 수 있다.
마지막에 실행된 쿼리의 커서만 닫힌다.
그래서 쿼리 별로 stmt를 개별로 만들어 주고 클로즈를 각각 해 주니 커서가 닫히더라..
여튼.. 그렇더라 -_-
댓글