關於Oracle 頑固的KILLED 狀態的SESSION的處理

來源:互聯網
上載者:User

最近在執行一個大業務量的預存程序,中間中斷,造成了對某個表的鎖。這時我再想修改預存程序,則因為這個鎖的存在,一直在等待。

在pl/sql developer中將這個session的狀態設定為KILLED,結果等了半天也沒有被PMON給清除掉,一直在那鎖表。參考一些資料,可以用下面的方法解鎖。

--下面這個sql語句,可以列出來各個指令碼,需要錄入sid,這個sid可以從pl/sql developer的session中查到。

SELECT 'alter system kill session ''' || ta.sid || ',' || ta.serial# || ''';',
       'alter system disconnect session ''' || ta.sid || ',' || ta.serial# || ''' immediate;',
       'host orakill ' || tc.instance_name || ' ' || tb.spid,
       'kill -9 ' || tb.spid,
       tb.spid,
       ta.osuser,
       tb.program,
       ta.terminal,
       ta.program
  FROM v$session ta, v$process tb, v$instance tc
 WHERE tb.addr = ta.paddr
   AND ta.sid = &yoursid;

-- 也可以用這個Metalink提供的指令碼,其中的os thread就是在orakill 時寫的spid

select p.spid "OS Thread", b.name "Name-User", s.osuser, s.program
from v$process p, v$session s, v$bgprocess b
where p.addr = s.paddr
and p.addr = b.paddr UNION ALL
select p.spid "OS Thread", s.username "Name-User", s.osuser, s.program
from v$process p, v$session s
where p.addr = s.paddr
and s.username is not null;

然後執行c:/>orakill oracle_sid os_thread,就可以殺掉killed的進程了。注意要避免殺系統進程,避免資料庫宕機。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.