脚本如下:
CREATE OR REPLACE PROCEDURE SYS.DB_KILL_INACTIVE_CLIENTS AS
sql1 varachar2(1000);
BEGIN
FOR I IN
(SELECT SID, SERIAL#, INST_ID, MODULE,STATUS
FROM gv$session S
WHERE S.USERNAME IS NOT NULL
AND UPPER(S.PROGRAM) IN ('xxx', 'xxx.EXE')
AND LOGONG_TIME<TRUNC(SYSDATE,'DD')-INTERVAL '4' HOUR
AND S.STATUS= 'INACTIVE'
ORDER BY INST_ID ASC
) LOOP
---------------------------------------------------------------------------
-- kill inactive sessions immediately
---------------------------------------------------------------------------
execute immediate 'alter system kill session ''' || rec.sid || ', ' ||
rec.serial# || '''immediate' ;
END LOOP;
END DB_KILL_INACTIVE_CLIENTS;
#!/bin/bash
logfile=/home/oracle/cron/session/log/killSession.log
echo " " >> $logfile 2>&1
echo "START ----`date`" >> $logfile 2>&1 ---此处记录开始时间日志
sqlplus /nolog <<STATS
connect / as sysdba
exec sys.db_kill_idle_clients;
exit;
STATS
echo "END ------`date`" >> $logfile 2>&1 --此处记录结束时间日志,查看日志查看是否执行即可。