Oracle進程無法KILL處理方案

來源:互聯網
上載者:User

Oracle進程被KILL之後,狀態被置為"KILLED",但是鎖定資源長時間不釋放,會出現類似下面這樣的錯誤提示:

ORA-00030: User session ID does not exist

ORA-00031: session marked for kill

以往大多都是通過重啟資料庫的方式來強行釋放鎖資源。
現提供另一種方式解決該問題,在ORACLE中KILL不掉,在OS系統中再殺,操作方式如下:

1. 查看哪些對象被鎖
SELECT DISTINCT t2.username,t2.sid,t2.serial#,t2.logon_time
from v$locked_object t1,v$session t2
where t1.session_id=t2.sid order by t2.logon_time;

2.查看對應執行的是哪一個SQL語句(會提示輸入SID參數,就是上一步查詢出來 的SID)
select sql_text from v$session a,v$sqltext_with_newlines b
  where DECODE(a.sql_hash_value, 0, prev_hash_value, sql_hash_value)=b.hash_value
  and a.sid=&sid order by piece;


3.殺死對應的進程(上述的sid與serial#參數傳入)
  alter system kill session 'sid,serial#';

上述步驟完成之後,若還是無法釋放對應的資源,進行下一步操作:

4. 取得語句的進程號
select spid,oSUSEr,s.program from v$session s,v$process p
where s.paddr=p.addr and s.sid=&sid;

5.在OS層級中殺死該進程
a. unix系統,以root身份執行以下命令
 # kill -9 &spid(即第4步查詢出來的進程號spid)
 b. windows系統,用orakill命令執行
文法為:orakill  sid thread
sid: oracle執行個體名
thread 線程號,即第4步中的spid
eg: c:> orakill orcl 12345

上述直至第4步,都是在oracle中執行的,第5步是在作業系統(服務端,非用戶端)中執行的

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.