오라클 특정 계정에 대한 세션연결 종료시키기

오승환·2023년 10월 9일
0

오라클

목록 보기
4/4

여러명이서 하나의 DB를 사용하다보면 TEST용 계정도 만들었다가 지우고 싶을 때가 있는데
지울 때 다른 사용자가 연결중이라면, 이 계정를 지울 수 없다.
보통 강제로 세션연결을 종료하는 것은 위험하지만,
지워야할 필요가 있다면 세션을 강제종료시키는 SQL문을 실행시킬 수 있다.
다음은 DBA 권한으로 접속하여 실행하면 특정 스키마의 모든 세션연결을 종료시키는 PL/SQL문이다.

DECLARE
BEGIN
    FOR r IN (SELECT s.sid, s.serial# 
              FROM v$session s 
              WHERE s.username = '[계정명]') 
    LOOP
        EXECUTE IMMEDIATE 'ALTER SYSTEM KILL SESSION ''' || r.sid || ',' || r.serial# || '''';
    END LOOP;
END;

만약 모든 유저계정에 대한 세션을 전부 종료하고 싶다면 SYSTEM 계정으로 접속하여 다음 쿼리문을 활용하자.

DECLARE
BEGIN
    FOR r IN (SELECT s.sid, s.serial# 
              FROM v$session s 
              WHERE s.username NOT IN ('SYS', 'SYSTEM') AND s.type = 'USER') 
    LOOP
        EXECUTE IMMEDIATE 'ALTER SYSTEM KILL SESSION ''' || r.sid || ',' || r.serial# || '''';
    END LOOP;
END;

다음은 세션연결이 잘 종료되었는지 계정에 대한 세션연결 목록을 보여주는 SQL문이다.
위 쿼리문을 실행하고 아래 쿼리문을 실행하였을 때 아무 결과도 나오지 않으면,
정상적으로 모든 세션연결이 종료된 것이다.

SELECT s.sid, s.serial#, s.username
FROM v$session s
WHERE s.username = '[계정명]';
profile
반갑습니다

0개의 댓글