DBA救火排殺指令碼

ftc007發表於2019-10-25

作為一個壓力山大的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);

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

版權宣告:本文為CSDN博主「dbs_service」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。

原文連結:https://blog.csdn.net/dbs_service/article/details/102719523


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25401903/viewspace-2661504/,如需轉載,請註明出處,否則將追究法律責任。

相關文章