Oracle 死连接前面已经讨论过一些解决方案,但实际应用中还是不是很方面,这里采用两手方案,针对的Unix下的oracle 死连接
1. 查出inactive 的连接
SELECT a.SID,b.SPID,a.SERIAL#,c.SQL_TEXT,a.LAST_CALL_ET,a.LOGON_TIME
from v$session A, V$PROCESS B,v$sqltext c
where A.PADDR = B.ADDR
AND a.type != 'BACKGROUND'
and a.status = 'INACTIVE'
and a.username = 'NETFORCE'
and a.machine = 'imep1'
and c.HASH_VALUE=DECODE(a.sql_hash_value, 0, a.prev_hash_value, a.sql_hash_value)
and c.ADDRESS= DECODE(a.sql_hash_value, 0, a.prev_sql_addr, a.sql_address)
and c.SQL_TEXT like '%SELECT 1 FROM DUAL%'
这个查询语名可根据各自需求进行修改,重要的是能够得到spid,导出spid为spid.txt(注意为UNIX格式,需要DOS->UNIX)
29380
29368
29402
29400
29396
29418
29442
29501
29509
29497
29493
29495
29533
29515
编写执行shell脚本 kill_spid.sh
#! /bin/sh
infile='/tmp/spid.txt'
j=0
len=`wc -l $infile`
while test $j -lt $len
do
spid=`tail +$j $infile | head -1`
echo "start kill -9 $spid"
kill -9 $spid
j=`expr $j + 1`
done