ITPub博客

首页 > 数据库 > Oracle > DBA救火排杀脚本

DBA救火排杀脚本

Oracle 作者:ftc007 时间:2019-10-25 18:56:07 1 删除 编辑

作为一个压力山大的DBA,很多时候需要面对处理一些紧急突发的救火任务,当业务出现异常,性能接近瘫痪的夺命一刻,需要果断出击,把系统业务的影响减少到最小,至于原因分析,可以交到后续分析,下面将针对不同的困境,作出排杀处理:

1,批量杀掉oracle连接进程:这种情况是终极绝招,在面对性能将要瘫痪的局面,可以立刻解决问题,但正在等待的业务或事务会被强行终止,需要重新请求!

ps -ef | grep LOCAL=NO | awk '{print $2}' | xargs kill -9


2,DBA能定位到引起性能异常的SQL,在数据库还能连接响应的情况下,批量生成kill -9的SQL批杀脚本:

select 'kill -9 '||spid from v$process 
where addr in 
(select paddr from v$session where sid 
in(select c.sid from v$session c 
Where username ='MBS7_OMS' and  event='SQL*Net message from dblink') );


3,DBA能定位到引起性能异常的schema,并且这个影响是整个schema层面业务的,在数据库还能连接响应的情况下,查杀同一个用户的会话:

select 'alter system kill session '''||c.sid||','||c.SERIAL# ||''';' 
from v$session c Where username ='RRJC' ;


3,这个跟上面第二点相似,查杀同一个SQLID的会话:

select 'alter system kill session '''||c.sid||','||c.SERIAL# ||''' immediate;'  
from v$session c 
where sql_id='1vnbgy700u1cu' ;


4,有时候需要排查一些连接进程的情况,方便跟踪性能问题,下面是查看同一个SQL_iD的登陆请求信息:

select sql_id,logon_time,machine,terminal,osuser 
from v$session 
where sql_id='1vnbgy700u1cu' 
order by logon_time desc;


–谨记kill后面加immediate参数,否则会让pmon回收很久!如不幸用了传统kill,可用下面方法再度释放:

select 'alter system kill session '''||c.sid||','||c.SERIAL# ||''' immediate;' 
from v$session c 
Where username ='FRNT' 
and machine in ('jk2','biweb2') 
and status='KILLED';


如果会话已经在DB里killed,上面的SQL已经查不出spid,可以用下面的SQL查出SPID

select addr, pid, spid
 FROM v$process p
 where addr in (select p.addr
 from v$process p
 where pid <> 1
 minus
 select s.paddr from v$session s);

————————————————

©版权声明:本文为   天凯DBS   的原创文章,转载请附上原文出处链接及本声明,否则将追究法律责任。

原文链接: https://dbs-service.cn/a/163.html


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25401903/viewspace-2661504/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论
十年DBA实战经验,专注数据库运维与优化,长期服务金融,税务,电商等关键行业,深受客户一致好评! 更多DBA服务与实战资源,请点击文章末尾出处 “天凯DBS”!

注册时间:2014-03-11

  • 博文量
    7
  • 访问量
    13620