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