Hi-Fi優質I.T網:技術文章...
您尚未登入...
帳號:
密碼:

忘記密碼 
 
  訂閱電子報

取消   訂閱
 
2005/1/10-15:34:54
 Oracle - 用OraKill結束異常的Oracle Process│作者:│分數:4

 

  當User Process 偶爾會因不當的操作或PL-SQL 造成LOOP而佔用大量的系統資源時,往往會影響其他的SESSION,如果DBA能夠還能夠登入DATABSE的話通常會以下列方式查詢:

select s.username, s.osuser, s.sid, s.serial#, p.spid from v$session, v$process p where s.paddr = p.addr and s.username is not null;

  這個查詢將回傳資料庫使用者名稱、作業系統使用者名稱、Session ID、序列號碼和Process ID(SPID)。然後DBA就可以下SQL Kill該USER:

alter system kill session 'sid, serial#';

  這句SQL有兩個問題。第一、分配給要Kill的 Process任何Lock或Resource在Session完全超時之前部會被釋放。第二、查詢和Kill指令需要在登入資料庫時執行,如果一個Process異常,那資料庫Session可能會出現問題。

  在Unix資料庫中,可使用 ps指令,該指令會顯示提示中定位的Process(同樣找到OSUSER和SPID)然後使用 Kill -9 spid 結束異常的Process。而在Windows中卻只有一個ORACLE.EXE背景的Process在產生執行緒連結USER在Windows執行緒中處理相關作業。如果可用工作管理員來結束Oracle在Windows的Process的話就會影響所用使用者的Session並導致資料庫發生不可預期的錯誤。

  在以上原因,Oracle提供一個ORAKILL.EXE執行檔,這個執行檔的參數與 ALTER SYSTEM KILL SESSION 'XX, XX';相同,但是不需要先連結資料庫。要指定一個特定的 Process 需要先找出顯示屬於這個 Process 的所有程式。Windows 工作管理員只能顯示 Process 各數與 Process 名稱,你需要從 Microsoft 的光碟中尋找一個用於 Windows 2000 或 NT 的工具程式,比如免費的 QuickSliceQslice.exe 或是 PStst(Pstat.exe執行檔)。簡單的在 ORAKILL.EXE 指令後輸入 Process ID(十進制表示)和 SID 即可:

orakill

"Kill of thread id 1429 in instance ORCL successfully signalled[sic]."

  對於以上方法最好是使用於無法登入資料庫執行 ALTER SYSTEM KILL SESSION 'XX, XX'; 時使用,因為不小心 Kill 掉一個必要的後端 Process 時,如:PMON ,那很有可能會導致資料庫嚴重損毀。


請評分: -3 -2 -1 +1 +2 +3
  
   

Hi-Fi優質I.T網”站內所有文章、圖片除特別加註外均屬本站所有,如有任何問題請來信告知
請支持言論自由,討論區所發表之言論不代表本站立場
Hi-Fi優質I.T網”版權所有2004©
---最佳顯示效果1024*768---