안녕하세요. Harry입니다.
2019년 처음 취직하여 사용하게 된 RDBMS가 바로 오라클인데요.
사용 초기에는 DML, DDL만 하였고 또 이거만 하면 충분하다고 생각을 하고 실무에 뛰어들었답니다..ㅠㅠ
정말 대책이 없었던 입사 초기 였던 것 같네요..ㅎ
그렇게 취직하여 신규 솔루션 개발(전자근로계약서)을 3개월가량 하다가
회사의 해외 법인 시스템 어드민(SM)을 담당하게 되었는데요.
이때, 빈번하게 발생했던 에러들에 있어 정말 유용하게 활용되었고 또 사용하고 있는 게
바로!! 오라클 세션 관련 쿼리입니다.. (세션이 락이 잡혔다거나,, 오픈 커서 문제라던지.. 탈이 정말 많았어요..)
오라클 학습 관련 내용 공유부터 하는 것이 순서 상 맞다고 생각하지만,
제가 너무 유용하게 쓰고 있는 쿼리들이라 우선 공유를 위해 게시글을 작성하였으니 참고 부탁드립니다.
소개에 앞서 제가 회사에서 사용하고 있는 오라클 버전과 툴은 Oracle 11g, PL/SQL Develpoer입니다.
자 지금 시작하도록 하겠습니다.
세션 조회 쿼리
1
|
SELECT * FROM V$SESSION;
|
cs |
오라클 계정 세션 검색(프로세스 고유 번호)
1
2
3
4
5
|
SELECT *
FROM V$SESSION A, V$PROCESS B
WHERE A.PADDR = B.ADDR
AND A.USERNAME = '오라클 계정 명' ;
-- 예를 들어, Oracle Scott 계정을 사용하고 있다면 USERNAME은 SCOTT
|
cs |
세션 죽이기(KILL SESSION)
1
|
ALTER SYSTEM KILL SESSION 'SID, SERIAL#';
|
cs |
세션 Kill 스크립트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
SELECT DISTINCT T1.SESSION_ID
, T2.SERAIL#
, T4.OBJECT_NAME
, T2.MACHINE
, T2.TERMINAL
, T2.PROGRAM
, T3.ADDRESS
, T3.PIECE
, T3.SQL_TEXT
, 'ALTER SYSTEM KILL SESSION '''||T2.SID||','||T2.SERAIL#||''';' AS KILLSCRIPT
FROM V$LOCKED_OBJECT T1
, V$SESSION T2
, V$SQLTEXT T3
, DBA_OBJECTS T4
WHERE 1 = 1
AND T1.SESSION_ID = T2.SID
AND T1.OBJECT_ID = T4.OBJECT_ID
AND T2.SQL_ADDRESS = T3.ADDRESS
ORDER BY T3.ADDRESS, T3.PIECE
;
|
cs |
여기에서 조회된 "KILLSCRIPT"부분을 카피하여 쿼리를 EXECUTE하면 세션을 한 번에 죽일 수 있습니다.
세션 락 조회(Locked Session)
1
2
3
4
5
6
7
|
SELECT X.OBJECT_ID
, X.SESSION_ID
, X.ORACLE_USERNAME
, X.OS_USER_NAME
, X.*
FROM V$LOCKED_OBJECT X;
|
cs |
Cursor 및 Cursor count 조회
1
2
3
4
5
6
|
SELECT SQL_TEXT, COUNT(SID)
FROM V$OPEN_CURSOR
GROUP BY SQL_TEXT
ORDER BY CNT DESC;
SELECT * FROM V$OPEN_CURSOR;
|
cs |
11월에 저를 당황시킨 문제였답니다..
DB가 커넥트 된 이후에 오라클 패키지, 프로시저라던지.... DAO에서라던지..
이전 개발자분이 CLOSE처리를 해주지 않아,, 서버 사용량 초과로 서버가 다운 되었지 뭐에요...ㅠㅠ
만약 저와 같이 ORA-28112 : Failed to execute policy function(정책함수 문제) 에러를 일으킨다면,
반드시 커서를 조회해주세요!!..
이상 작성을 마치며, 더욱 유익한 정보를 가지고 오도록 하겠습니다.
Harry 올림
댓글