ORACLE如何停止乙個JOB

2021-04-22 12:13:51 字數 3559 閱讀 5206

oracle

如何停止乙個

job

dba_jobs

all_jobs

user_jobs

包含登入使用者所有的

job資訊

dba_jobs_running

包含正在執行

job相關資訊

注意 須使用oracle

的sys

使用者登入到資料庫,才能檢視

dba_jobs_running, v$process, v$session

表的資訊。同時,登入作業系統時,要用

oracle

使用者。

為同事解決乙個因為網路連線情況不佳時,執行乙個超長時間的

sql插入操作。

既然網路狀況不好,就選擇了使用一次性使用

job來完成該插入操作。在

job執行一段時間後,我發現被插入表有些問題(慚愧,當時也沒有先檢查檢查就做了)。準備停止

job,因為在

job運**況下,我的所有修改都會報系統資源忙的錯誤。 強行

kill session

是行不通的,因為過會兒,

job還會重新啟動,如果執行的

sql也被

kill

了通過重新啟動的

job還是會被再次新執行的。

比較好的方法應該是

;

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

時,還是很「倔強

」的-:)

很多時候遇到某個

session

一直處於

active

,使得cpu

一直處於搞使用狀態,雖然

kill

了,但是卻不能夠使得使得執行緒結束。

kill session

只是kill

這個程序,但是執行緒一直處於活動狀態。需要真正的

kill

執行緒才能夠解決

cpu使用率高的問題。

os :windows2003

orakill

用法是orakill sid spid

其中sid

為例項名,

spid

為執行緒號。

怎麼樣取得這個

spid

呢? 以下給出查詢

spid

的語句。

select spid, osuser, s.program fromv$process p, v$session s

where p.addr=s.paddrand s.sid = ***;

--說明

:***

為session

的sid (

不是資料庫

sid 呵呵)

。自己輸入就可以。

orakill instance_name spid

這樣就能夠成功解決

cpu使用率高的問題  

oracle 強制停止job

一 溫柔的方法 1 檢視所有job select from dba jobs 2 檢視正在執行的job select from dba jobs running 3 根據sid查出對應的session select sid,serial from v session where sid sid 4 ...

如何停止乙個執行緒

停止乙個執行緒的最佳方法是讓它執行完畢,沒有辦法立即停止乙個執行緒,但你可以控制何時或什麼條件下讓他執行完畢。通過條件變數控制線程的執行,執行緒內部檢查變數狀態,外部改變變數值可控制停止執行。為保證執行緒間的即時通訊,需要使用volatile關鍵字或鎖,確保讀執行緒與寫執行緒變數狀態的一致性。pub...

oracle 停止正在執行的job

oracle如何停止乙個job 1 相關表 檢視 2 問題描述 為同事解決乙個因為網路連線情況不佳時,執行乙個超長時間的sql插入操作。既然網路狀況不好,就選擇了使用一次性使用job來完成該插入操作。在job執行一段時間後,我發現被插入表有些問題 慚愧,當時也沒有先檢查檢查就做了 準備停止job,因...