일일이 작업할 수는 없기 때문에 다음과 같이 생성 구문을 만든 뒤 Procedure를 사용하여 실행하는 방법으로 진행한다.
select'alter system kill session '''||sid||','||serial# ||''''as ddl from v$session;
실행해보면 세션 종료 구문이 ddl이라는 이름으로 생성되는 것을 알 수 있다.
우리는 열린지 1시간이 지난 세션을 제거할 예정이므로 조건을 추가하여 다음과 같이 작성한다.
select'alter system kill session '''||sid||','||serial# ||''''as ddl from v$sessionwhere logon_time <sysdate- (1/24);
SQL 구문 자동 실행
PL/SQL 을 이용하여 여러 개의 세션을 자동으로 종료할 수 있다. 단, 세션이 여러 이유로 종료되지 않을 수 있는데, 이 때는 아무런 작업을 하지 않도록 작성하였다.
-- session auto kill using PL/SQLBEGIN-- 결과만큼 반복할 SQL 구문을 작성하고 별칭을 CUR로 부여FOR CUR IN (SELECT'ALTER SYSTEM KILL SESSION '''|| SID ||','|| SERIAL# ||''''AS DDL FROM V$SESSIONWHERE LOGON_TIME <SYSDATE- (1/24) )LOOPBEGIN-- 조회된 구문 실행EXECUTE IMMEDIATE CUR.DDL;EXCEPTION-- 예외 발생 시 아무작업을 하지 않음WHENOTHERSTHENNULL;END; END LOOP; END;/
실행했을 때 PL/SQL procedure successfully completed 라고 나오면 구문에 오류가 없는 것이다. 실행 완료된 구문을 프로시저(Procedure)로 만들기 위해 다음의 접두사를 추가한다.
-- session auto kill procedureCREATE OR REPLACE PROCEDURE AUTO_CLEAR_SESSION ASBEGIN-- 결과만큼 반복할 SQL 구문을 작성하고 별칭을 CUR로 부여FOR CUR IN (SELECT'ALTER SYSTEM KILL SESSION '''|| SID ||','|| SERIAL# ||''''AS DDL FROM V$SESSIONWHERE LOGON_TIME <SYSDATE- (1/24) )LOOPBEGIN-- 조회된 구문 실행EXECUTE IMMEDIATE CUR.DDL;EXCEPTION-- 예외 발생 시 아무작업을 하지 않WHENOTHERSTHENNULL;END; END LOOP; END;/