Oracle Cursor
Cursor란?
특정 sql 문장을 처리한 결과를 담는 메모리 공간을 의미한다.
Fetch란?
커서에서 원하는 결과값을 추출하는 행위를 뜻한다.
Oracle Cursor의 종류
Cursor 종류 | 기능 |
---|---|
명시적 Cursor | 사용자가 선언해서 생성 후 사용하는 sql Cursor. 주로 여러개의 행을 처리할때 사용한다. |
묵시적 커서 | Oracle에서 자용으로 선언해주는 Cursor로 사용자는 생성유무를 알 수 없다. |
Oracle Cursor의 사용
- Cursor를 선언한다.
- Cursor 오픈한다.
- Cursor 에서 테이블을 추출한다.
- Cursor 종료한다.
Cursor 개수 확인 방법
sql 쿼리당 Cursor 개수가 몇 개나 되는지 확인해보자.
SELECT SQL_TEXT, COUNT(SID) CNT
FROM V$OPEN_CURSOR
GROUP BY SQL_TEXT
ORDER BY CNT DESC;
Oracle 프로세스당 Cursor 개수가 몇 개나 되는지 확인해보자.
SELECT SID, COUNT(SID) cursorcount
FROM V$OPEN_CURSOR
WHERE USER_NAME = 'MY_USER'
GROUP BY SID
ORDER BY cursorcount DESC;
caution
여러 쓰레드에서 동시에 많은 쿼리를 실행하고 결과를 처리해야 하는 경우, 커서의 한계로 인한 문제가 발생할 수 있다.
아래 메시지는 커서 개수 부족으로 인해 발생하는 에러 메시지이다. 대부분은 sql 쿼리를 최적화 하여 해결할 수 있는 문제이다.
//에러메시지
Cause: java.sql.SQLException: ORA-01000: 최대 열기 커서 수를 초과했습니다
댓글남기기