본문 바로가기
DEVELOPER HARRY/Oracle

오라클(Oracle)#1. 세션(Session)관련 쿼리

by 갈색토마토 2020. 12. 2.

안녕하세요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 올림

댓글