Kill 할 Session 확인 & 쿼리 추출
è Total Session & Active Session 조회
select INST_ID,to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') "Time",
count(*) "Total Sessions",
count(decode(status, 'ACTIVE',1) ) "Active Sessions"
from gv$session
group by inst_id;
è Kill 할 Session 확인.
- STATUS 가 INACTIVE 인 SESSION을 조회 하는 쿼리.
SELECT sid,serial#,status,last_call_et,to_char(logon_time,'YYYY-MM-DD hh24:mi:ss') LOGON_TIME
FROM V$SESSION
WHERE status='INACTIVE'
AND username not in ('SYS'') -- 제외 할 USERNAME 입력
AND last_call_et > 86400 – INACTIVE 상태로 된 시간 (단위 : 초, ex : 86400 = 하루)
n LOGON_TIME : 로그온 시간(CONNECTION 맺어진 시간)
n LAST_CALL_ET : Session이 ACTIVE or INACTIVE 상태가 된 시간 (단위 : 초)
è KILL Session 쿼리 추출
- 위의 쿼리를 수행 후 조회 된 Session 들을 KILL 해야 될 때 수행하는 쿼리
select 'ALTER SYSTEM KILL SESSION '''||sid||','||serial#||''''||' immediate ;' smt
from v$session
where status ='INACTIVE'
and username not in ('SYS') – 제외 할 USERNAME 입력
and last_call_et > 86400; -- INACTIVE 상태로 된 시간 (단위: 초, ex : 86400 = 하루)
※ 주의점: Session 을 Kill 하게 되면 SMON에 의해서 Clean-Up 되는 시간이 필요함.
SQL에서 Session Kill 후에 OS 에서 kill -9 명령어를 또다시 날리게 되면 SMON을
Kill 하게 되므로 DB가 Shutdown 됨.