에 갑자기 뭔 커서 수가 초과했다는 메시지가 나오면서 페이지 오류가 나왔다.
Tomcat 로그를 보니
java.sql.SQLException: ORA-01000: 최대 열기 커서 수를 초과했습니다.
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:207)
at oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:790)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1031)
at oracle.jdbc.driver.T4CStatement.executeMaybeDescribe(T4CStatement.java:830)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1124)
at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1264)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:1643)
.................
요 모양으로 나온다.
일단 커서수를 확인해보기 위해서 오라클에서 sys 로 로그인해서 쿼리를 날려보자.
SELECT sql_text, count(sid) cnt
FROM v$OPEN_CURSOR
GROUP BY sql_text
ORDER BY cnt DESC
FROM v$OPEN_CURSOR
GROUP BY sql_text
ORDER BY cnt DESC
SQL_TXT CNT
select mem_gbn, mem_seq from .... 32
select web_id from ...................... 29
SELECT count(year) as tot .......... 28
SELECT SUBSTR(IN_DATE,0,4) AS 28
select count(in_date) as tot from .. 20
select mem_gbn,mem_seq from .... 18
select * from web_member where. 14
.......................
쫌 있다...
원하는 유저에 대해서만 보고 싶다면
SELECT sql_text, count(sid) cnt
FROM v$OPEN_CURSOR
WHERE user_name = 'SCOTT'
GROUP BY sql_text
ORDER BY cnt DESC
조건절에 user_name 을 적어주면 되겠다.
문제는 저 위에서 CNT에 해당하는 것이다.
저 커서수가 좀 많다면...
동시접속수가 많은 사이트라면 클수도 있겠지만
테스트 환경이라서 접속수가 많지 않다면
저 CNT 증감을 체크해보면 어떤 페이지의 어떤 쿼리가 문제인지 대략적인 감은 잡을 수 있을것이다.
원인 : PreparedStatement 가 close() 되지 않은경우가 대부분의 원인이 된다.
해결 : PreparedStatement 가 사용된경우 close() 처리등 확인
'Programming & > Database' 카테고리의 다른 글
오라클 9i 다운로드하기 (0) | 2011.05.12 |
---|---|
MSSQL 에서 로그인시 대소문자 구분 (0) | 2010.06.16 |
리눅스에서 oracle 재시작 (0) | 2010.03.16 |
mysql root 패스워드 분실시 패스워드 변경하기 (0) | 2010.02.22 |
MSSQL 에서 테이블의 컬럼 정보를 볼려면...mysql, oracle의 DESC 명령어처럼.. (0) | 2009.09.22 |