oracle如何停止乙個job
1 相關表、檢視
2 問題描述
為同事解決乙個因為網路連線情況不佳時,執行乙個超長時間的sql插入操作。
既然網路狀況不好,就選擇了使用一次性使用job來完成該插入操作。在job執行一段時間後,我發現被插入表有些問題(慚愧,當時也沒有先檢查檢查就做了)。準備停止job,因為在job運**況下,我的所有修改都會報系統資源忙的錯誤。
強行kill session是行不通的,因為過會兒,job還會重新啟動,如果執行的sql也被kill了通過重新啟動的job還是會被再次新執行的。
3 解決辦法
比較好的方法應該是;
1). 首先確定要停止的job號
在10g中可通過dba_jobs_running進行確認。
查詢正在執行的job:
select sid from dba_jobs_running;
查詢到正在執行的job的spid:
select a.spid from v$process a ,v$session b where a.addr=b.paddr and b.sid in (select sid from dba_jobs_running);
2). broken你確認的job
注意使用dbms_job包來標識你的job為broken。
sql> exec dbms_job.broken(job#,true);
注意:當執行完該命令你選擇的這個job還是在執行著的。
3). kill 對應的oracle session
應為broken後該job還在執行,如果要求該job立刻停止,就需要找到該job的對應session(sid,serial#),然後執行以下命令:
alter system kill session 『sid,serial#』;
或者直接kill對應的作業系統的session,如果使用alter system kill session執行很長時間,其實可以使用os的命令來快速kill掉session.
for windows, at the dos prompt: orakill sid spid
for unix at the command line> kill –9 spid
4). 檢查你的job是否還在執行
檢查你要停止的job是否還在執行,其實多數情況下,應該都已經停止了。尤其執行的第三步的「殺手」命令。如果真的還是沒有停止,只好從第一道第三步重新做一下了。
5). 將job queue processes的數目修改為0
首先確認當前的job queue processes的數目
sql> col value for a10
sql> select name,value from v$parameter where name =』job_queue_processes』;
然後將job queue processes的數目修改為0
sql> alter system set job_queue_processes = 0;
保證所有的job都會停止。
6). 修改你要修改的任何東西,甚至是job內的內容。
7). 修改完成後,將job的broken狀態停止。
sql>exec dbms_job.broken(job#,false):
8). 恢復job_queue_processes的原始值
alter system set job_queue_processes = original_value;
至此整個停止並修改job完成.
但是需要另外注意一下的是,在mark乙個broken狀態的時候,因為job內部執行sql的原因,所以執行時或許要「煎熬」一段時間。所以在建立job時一定要仔細考慮,同時如果可能可以在你設計的pl/sql**中,增加一些判斷「停止訊號」的部分。來避免費力執行上面的步驟。
畢竟,oracle在執行job時,還是很「倔強」的 -:)
4 附件:orakill用法
很多時候遇到某個session一直處於active,使得cpu一直處於搞使用狀態,雖然kill 了,但是卻不能夠使得使得執行緒結束。 kill session只是kill這個程序,但是執行緒一直處於活動狀態。需要真正的kill執行緒才能夠解決cpu使用率高的問題。
os :windows2003
orakill用法是 orakill sid spid 其中sid為例項名,spid為執行緒號。
怎麼樣取得這個spid呢?
以下給出查詢spid的語句。
select spid, osuser, s.program from v$process p, v$session s
where p.addr=s.paddr and s.sid = ***;
–說明:***為session的sid (不是資料庫sid 呵呵)。自己輸入就可以。
orakill instance_name spid
這樣就能夠成功解決cpu使用率高的問題
oracle如何查詢和停止正在執行的job
今天遇到乙個問題,有乙個job會一直不停的執行,不能按照設定的間隔來執行。通過查詢相關資料發現原來如此 當乙個oracle job執行時返回乙個error時,oracle會再次設法執行它,第一次嘗試是在一分鐘後,第二次是在2分鐘後,第三次是4分鐘後,以此類推。每次嘗試的週期加倍,直到下一次的執行時刻...
oracle expdp如何停止正在執行的job
linux環境,前幾天使用expdp導資料,中途不想導了,當時直接關了當前cmd 視窗,想起可能這個job還在執行。好吧,學習一下如何停止 1 先看看有哪些資料幫浦的job select from dba datapump jobs 以上語句查出來的可能有幾條資料 sys export schema...
強制停止正在執行的方法
摘要 如何暴力停止當前正在執行中的方法?利用執行緒強制退出,終止當前方法的執行。可以用於使用者頻繁操作ui請求後台服務,操作耗時等業務場景。廢話不說,上 1 2 可強制終止執行的方法。用在比較耗時的操作沒有結果的時候,強制退出上次的執行操作,以確保本次正確執行 3 4public class ter...