下面语句全是干货哦,一个个拿去查查就知道了,连要怎么杀会话的命令都有,只要复制了,打开一个plsql 的命令行窗口,就可以全部执行杀掉了,或者linux服务器上使用sqlplus 这个交互方式也可以杀
sqlplus -silent / as sysdba <<EOF
ALTER SYSTEM KILL SESSION '1282,34211' ;
##依次粘贴会话就可以了
EOF
--查询有多少不活动的死会话
SELECT 'alter system disconnect session '''||sid||','||s.SERIAL#||''' immediate;',s.inst_id, s.sid,s.USERNAME,s.CLIENT_INFO,s.SERIAL#,s.sql_id,s.SQL_CHILD_NUMBER,s.LAST_CALL_ET,
s.SQL_HASH_VALUE,t.SQL_TEXT,t.sql_fulltext, s.PROGRAM, s.MACHINE,S.STATUS
FROM gv$session s, gv$sql t
where s.SQL_ADDRESS = t.address
and s.sql_hash_value = t.HASH_VALUE
and s.LAST_CALL_ET >0
and s.inst_id=1
and s.STATUS <>'ACTIVE' order by s.LAST_CALL_ET desc
####################################################
###### 以下两个 sql 应对会话卡死操作
select * from (
SELECT s.type,s.username 用户名称, s.status 状态,s.machine 机器名称,
osuser 操作系统用户名称,spid UNIX进程号,
'kill -9 '||spid UNIX级断开连接,
'alter system kill session ' ||''''||s.sid||','||s.serial# ||''' immediate;' Oracle级断开连接,
TO_CHAR (logon_time, 'dd/mm/yyyy hh24:mi:ss') 登陆时间,
last_call_et 空闲时间秒,
TO_CHAR (TRUNC (last_call_et / 3600, 0))||' '||' HRS '||
TO_CHAR (TRUNC ((last_call_et - TRUNC(last_call_et / 3600, 0) * 3600) / 60, 0) ) ||' MINS' 空闲时间小时分钟,
module 模块
FROM gv$session s, gv$process p
WHERE TYPE = 'USER'
AND p.addr = s.paddr
AND status != 'KILLED' and s.username<>'SYS'/*and s.username='JSPT'*/ and s.status='ACTIVE'
-- AND SUBSTR (machine, 1, 19) NOT IN ('机器名')
AND last_call_et >60 --60 * 60 * 1-- 空闲时间超过1小时的连接
-- and exists (select 1 from gv$sql bb where bb.sql_id=s.sql_id and /*bb.SQL_TEXT like '%wssq_tcs_lcb%' or*/ bb.SQL_TEXT like '%@pzhd%' )
ORDER BY last_call_et desc) where rownum<540
select t.last_call_et,t.sql_id ,a.SQL_TEXT,a.SQL_FULLTEXT,a.EXECUTIONS,'alter system kill session ' ||''''||t.sid||','||t.serial# ||''' immediate;',t.* from gv$session t,gv$sql a
where t.STATUS='ACTIVE' and t.SQL_ID=a.SQL_ID and t.SCHEMANAME<>'SYS'
and t.LAST_CALL_ET>1000
--and a.SQL_TEXT like '%WSSQ_TCS_LCB%';
##这个看jinjin那边是卡哪个语句,last_call_et, 这个空闲时间 就是卡住的时间,越大越有问题
select t.last_call_et,t.sql_id ,a.SQL_TEXT,a.EXECUTIONS,t.* from gv$session@gt3 t,gv$sql@gt3 a where t.STATUS='ACTIVE' and t.SQL_ID=a.SQL_ID and t.SCHEMANAME<>'SYS' order by t.last_call_et desc;