排查oracle会话非活动状态的语句
Posted 老周21
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排查oracle会话非活动状态的语句相关的知识,希望对你有一定的参考价值。
下面语句全是干货哦,一个个拿去查查就知道了,连要怎么杀会话的命令都有,只要复制了,打开一个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;
以上是关于排查oracle会话非活动状态的语句的主要内容,如果未能解决你的问题,请参考以下文章