Kill執行中的JOB的問題

beatony發表於2012-12-31
Kill執行中的JOB的問題
 
系統中有一個JOB,由於SQL編寫的問題,導致執行了5個多小時還沒完,我想把它kill掉。
 
1. 首先我得檢視正在跑的JOB有哪些:(為什麼要加這個RULE提示呢,因為在你SYS沒被分析的時候,直接查詢(CBO)是非常慢的。可能在這個檢視裡查不到結果,但JOB的SESSION確實在跑。)
SELECT /*+ RULE */ * FROM DBA_JOBS_RUNNING;
10g的話可以查dba_scheduler_job_run_details獲得更多資訊。
接下來找到了這個JOB對應session的SID和對應的OS JOB程式(j000等)的SPID。
select * from gv$process a,gv$session b
where a.addr=b.paddr and b.status='ACTIVE' and b.schemaname='A'
 
2. 然後,在OS上kill對應的SPID$> kill -9 SPID
 
3.過一分鐘左右的時間,再次查詢gv$session,發現此session還在,SPID變了,
在OS上自動產生了一個j000程式與此session對應。
 
4. 將job設成broken狀態(使用dbms_job包來標識你的JOB為broken.
SQL> exec dbms_job.broken(job#,TRUE);
再次 kill -9 SPID。過一分鐘左右此session沒了,OS也沒再產生新的job程式。
( for windows,at the DOS prompt: orakill sid spid )
(for UNIX at the command line > kill -9 spid  )
 
5.將Job queue processes 數目更改為0
SQL:> alter system set job_queue_processes = 0;

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

相關文章