0
点赞
收藏
分享

微信扫一扫

排查oracle会话非活动状态的语句

8052cf60ff5c 2022-07-28 阅读 202

下面语句全是干货哦,一个个拿去查查就知道了,连要怎么杀会话的命令都有,只要复制了,打开一个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;  


举报

相关推荐

0 条评论