Oracle 死连接的第二种解决方案

本文介绍了一种用于检测和解决Oracle数据库中死连接的方法。通过查询v$session, v$process 和 v$sqltext 视图来查找处于inactive状态的连接,并使用shell脚本kill这些连接的进程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值