여러명이서 하나의 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 = '[계정명]';