Oracle SQL 세션 세부 정보 확인 방법

Oracle 데이터베이스에서 현재 실행 중인 SQL 세션 정보를 조회하는 방법을 소개합니다.
이를 통해 세션 모니터링, 성능 분석, 트러블슈팅을 효과적으로 수행할 수 있습니다.


1. 현재 활성 세션 조회

현재 실행 중인 SQL 세션을 확인하려면 다음 SQL을 실행하세요.

SELECT SID, SERIAL#, USERNAME, STATUS, MACHINE, PROGRAM, LOGON_TIME
FROM V$SESSION
WHERE STATUS = 'ACTIVE';

컬럼 설명

  • SID : 세션 ID
  • SERIAL# : 세션 고유 번호
  • USERNAME : 오라클 사용자
  • STATUS : 세션 상태 (ACTIVE, INACTIVE 등)
  • MACHINE : 접속한 클라이언트 머신
  • PROGRAM : 실행 중인 프로그램
  • LOGON_TIME : 세션 시작 시간

이 SQL을 사용하면 현재 활성화된 세션 리스트를 빠르게 조회할 수 있습니다.


2. 특정 세션의 실행 중인 SQL 조회

특정 세션에서 실행되고 있는 SQL 문을 조회하려면 다음 SQL을 사용합니다.

SELECT S.SID, S.SERIAL#, S.USERNAME, S.STATUS, Q.SQL_TEXT
FROM V$SESSION S
JOIN V$SQL Q ON S.SQL_ID = Q.SQL_ID
WHERE S.STATUS = 'ACTIVE';

설명

  • V$SESSION 뷰와 V$SQL을 조인하여 현재 실행 중인 SQL을 조회
  • SQL_TEXT 컬럼을 통해 실제 실행 중인 SQL 문장 확인 가능

이를 통해 특정 사용자의 실행 SQL을 추적하고 문제 발생 시 디버깅할 수 있습니다.


3. 실행 중인 SQL의 실행 계획(Execution Plan) 확인

SQL 실행 계획을 조회하려면 아래 SQL을 실행하세요.

SELECT S.SID, S.SERIAL#, Q.SQL_ID, Q.PLAN_HASH_VALUE, T.OPERATION, T.OPTIONS
FROM V$SESSION S
JOIN V$SQL_PLAN T ON S.SQL_ID = T.SQL_ID
JOIN V$SQL Q ON S.SQL_ID = Q.SQL_ID
WHERE S.STATUS = 'ACTIVE';

컬럼 설명

  • PLAN_HASH_VALUE : 실행 계획 해시값
  • OPERATION : 실행 단계 (예: TABLE ACCESS, INDEX SCAN 등)
  • OPTIONS : 실행 옵션 (예: FULL, RANGE SCAN 등)

SQL 실행 계획을 확인하면 성능 최적화 및 SQL 튜닝에 도움을 줄 수 있습니다.


4. 특정 세션 강제 종료(Kill Session)

불필요하거나 문제가 발생한 세션을 종료하려면 다음 SQL을 실행하세요.

ALTER SYSTEM KILL SESSION 'SID,SERIAL#' IMMEDIATE;

사용 예시

예를 들어, SID=1234이고 SERIAL#=56789인 세션을 종료하려면:

ALTER SYSTEM KILL SESSION '1234,56789' IMMEDIATE;

주의사항:
세션 강제 종료 시 연결된 트랜잭션이 롤백될 수 있으므로 신중하게 사용해야 합니다.


5. 테스트

수행되는 SQL 세션 정보를 확인하는 일반적인 방법으로 v$session가 v$process 뷰를 통해서 확인합니다.

SET LINESIZE 190 
COLUMN spid FORMAT A10
COLUMN username FORMAT A15
COLUMN program FORMAT A65
SELECT s.inst_id,
s.sid,s.serial#,
p.spid,
s.username,
s.program
 FROM gv$session s
 JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id
WHERE s.type != 'BACKGROUND';
SQL> r
  1  SELECT s.inst_id,
  2  s.sid,s.serial#,
  3  p.spid,
  4  s.username,
  5  s.program
  6   FROM gv$session s
  7   JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id
  8* WHERE s.type != 'BACKGROUND'

   INST_ID        SID    SERIAL# SPID       USERNAME        PROGRAM
---------- ---------- ---------- ---------- --------------- -----------------------------------------------------------------
         1         55      31855 14082      SYSTEM          sqlplus@ora19c (TNS V1-V3)
         1         56      65428 13890      APEX_PUBLIC_USE Oracle REST Data Services
                                            R

         1        299      41229 13897      APEX_PUBLIC_USE Oracle REST Data Services
                                            R

         1         66      13195 13895      APEX_PUBLIC_USE Oracle REST Data Services
                                            R

         1        290      24817 13909      ORDS_PUBLIC_USE Oracle REST Data Services
                                            R

         1         68      59732 13911      ORDS_PUBLIC_USE Oracle REST Data Services
                                            R

         1        307      59406 13913      ORDS_PUBLIC_USE Oracle REST Data Services
                                            R

         1         58       3033 13920      APEX_LISTENER   Oracle REST Data Services
         1        295      26742 13922      APEX_LISTENER   Oracle REST Data Services
         1         54      25653 13924      APEX_LISTENER   Oracle REST Data Services
         1        293      12521 13932      APEX_REST_PUBLI Oracle REST Data Services
                                            C_USER

         1         52       3346 13934      APEX_REST_PUBLI Oracle REST Data Services
                                            C_USER

         1        305      11563 13936      APEX_REST_PUBLI Oracle REST Data Services
                                            C_USER


13 rows selected.

결론

Oracle 데이터베이스에서 현재 실행 중인 세션 정보를 조회하는 방법을 정리했습니다.
이를 활용하면 실시간 세션 모니터링, SQL 튜닝, 성능 분석, 문제 해결을 효과적으로 수행할 수 있습니다.