[SQL] v$session으로 세션 강제 종료하기

다양한 원인으로 해당 DB에 물려있는 세션을 강제 종료해야하는 상황이 있을 수 있다.

이때, v$session을 통하여 DB와 연결되어있는 세션을 조회 할 수 있다.

v$session 구성

SQL> desc v$session;

COLUMN_NAME                              TYPE               CONSTRAINT
---------------------------------------- ------------------ --------------------
SID                                      NUMBER
SERIAL#                                  NUMBER
AUDSID                                   NUMBER
USER#                                    NUMBER
USERNAME                                 VARCHAR(128)
IPADDR                                   VARCHAR(46)
COMMAND                                  NUMBER
THROW_DISABLED                           VARCHAR(3)
SI_FLAG                                  VARCHAR(34)
STATUS                                   VARCHAR(32)
SO_STATUS                                VARCHAR(32)
SO_SID                                   NUMBER
SCHEMA#                                  NUMBER
SCHEMANAME                               VARCHAR(128)
TYPE                                     VARCHAR(15)
SQL_ID                                   VARCHAR(13)
SQL_CHILD_NUMBER                         NUMBER
PREV_SQL_ID                              VARCHAR(13)
PREV_CHILD_NUMBER                        NUMBER
SQL_ET                                   NUMBER
LOGON_TIME                               DATE
STATE                                    VARCHAR(25)
WLOCK_WAIT                               VARCHAR(18)
WAIT_EVENT                               NUMBER
WAIT_TIME                                NUMBER
PGA_USED_MEM                             NUMBER
SQL_TRACE                                VARCHAR(8)
PROG_NAME                                VARCHAR(30)
CLIENT_PID                               NUMBER
PID                                      NUMBER
WTHR_ID                                  NUMBER
OS_THR_ID                                NUMBER
OSUSER                                   VARCHAR(128)
MACHINE                                  VARCHAR(64)
TERMINAL                                 VARCHAR(15)
MODULE                                   VARCHAR(64)
ACTION                                   VARCHAR(64)
CLIENT_INFO                              VARCHAR(64)
CLIENT_IDENTIFIER                        VARCHAR(64)
PDML_ENABLED                             VARCHAR(3)
PDML_STATUS                              VARCHAR(8)
PDDL_STATUS                              VARCHAR(8)
PQ_STATUS                                VARCHAR(8)
ROW_WAIT_OBJ_ID                          NUMBER
ROW_WAIT_FILE_NO                         NUMBER
ROW_WAIT_BLOCK_NO                        NUMBER
ROW_WAIT_ROW_NO                          NUMBER
CONSUMER_GROUP                           VARCHAR(32)
CONSUMED_CPU_TIME                        NUMBER

 

 

특정 세션 종료하기

ALTER SYSTEM KILL SESSION 'sid,serial#';

--ex)

select user, sid, serial# from v$session;

USER              SID    SERIAL#
---------- ---------- ----------
SYS                88      66879
SYS                89      66881
SYS                90      66885
SYS                91      69916
SYS                92      66890
SYS                93      66946

6 rows selected.

kill 쿼리 수행

 

모든 세션 종료하기

사용량이 많은 DB의 경우, 재난 훈련 등 모종의 이유로 모든 세션을 종료시켜야 하는데 일일히 치는것도 일이다.

 

---보기 좋게 페이징

set pagesize 999
set linesize 999
col login_time format a10
col sid format a10
col serial# format a10
col usernmae format a10
col script format a50


select logon_time, sid,serial#,username,'ALTER SYSTEM KILL SESSION '''||SID||','||SERIAL#||''';' AS script
from v$session order by logon_time;

 

 

notpad에 복사 후 script 해당 되는 부분을 입력하면 모든 세션 종료하기 성공!

 

반응형

'DB > SQL' 카테고리의 다른 글

백업 프로시저 EXEPTION 예제  (0) 2025.06.15
Redo Log 사이즈 변경하기  (0) 2023.09.13
[SQL] like % _ escape 문  (0) 2023.08.08
유저 생성 , 권한 부여 , 수정 (ORACLE, TIBERO)  (0) 2023.07.12
mysql 명령어  (0) 2021.06.21