[Oracle] 오래된 비활성 세션(inactive session)을 자동으로 죽이기
앞서 “사용자 세션을 수동으로 종료시키는 방법“을 알아봤으니 이제는 자동으로 죽이는 방법에 대해 알아보겠습니다.
Step 1. 오래된 inactive session 조회하기
– oracle 사용자로 로그인해서 스크립트를 작성해야 합니다.
– 아래 스크립트는 15분 이상 경과한 inactive session을 조회하는 sql script입니다.
– 특정 사용자의 inactive session만 조회하기 위해서는 where절의 USERNAME 조건을 uncomment합니다.
– RAC 환경이라면, GV$SESSION뷰를 사용하고 옵션에 ,@inst_id를 추가합니다.
$ vi /path/to/inactive_session.sql set lines 600; set pages 600; TTITLE OFF; SET HEAD OFF; SELECT 'Alter system kill session ''' || SID || ',' || SERIAL# || '''immediate;' AS KILL_CMD FROM V$SESSION WHERE STATUS != 'ACTIVE' --AND USERNAME = 'YOUR_USERNAME' AND WAIT_CLASS = 'Idle' AND round(SECONDS_IN_WAIT/60,2) > 15; exit;
Step 2. Step 1에서 작성한 sql script를 사용해서 shell script 만들기
– 쉘 환경설정 파일에 오라클 운영 환경이 설정되어 있으면 export로 환경설정을 하지 않아도 됩니다.
$ vi /path/to/kill_inactive_session.sh #!/bin/bash --export ORACLE_SID= --export ORACLE_BASE=/u01/app/oracle --export ORACLE_HOME=${ORACLE_BASE}/product/11.2.0.4/dbhome_1/ --export PATH=$ORACLE_HOME/bin:$PATH sqlplus -S "/as sysdba" @/path/to/inactive_sessesion.sql > /path/to/kill_inactive_session.sql sqlplus -S "/as sysdba" @/path/to/kill_inactive_sesssion.sql > /u01/scripts/kill_inactive_session_out.log exit
Step 3. Step 2에서 작성한 shell script에 실행권한 부여하기
$ chmod 755 /path/to/kill_inactive_session.sh
Step 4. Step 2에서 작성한 shell script을 crontab에 등록하기
– root 사용자로 로그인한 후 crontab -e
명령어를 실행합니다. crontab 명령어의 자세한 사용법
– 매 5분마다 실행되도록 등록합니다. 실행 주기는 운영 환경에 맞게 설정합니다.
$ crontab -e */5 * * * * su - oracle -c /path/to/kill_inactive_session.sh