先以下列的SQL找出正在running的job,並確認要刪除的job及sid。
select /*+ rule */ * from dba_jobs_running;
假設找到的 job=1640,sid=32
查job的內容
select * from dba_jobs where job=1640;
將job的broken改為Y
exec dbms_job.broken(1640,true);
找出執行job session的sid、serial#、OS process id
select vs.sid,vs.serial#,vp.spid,vs.*,vp.* from v$session vs,v$process vp
where vp.addr=vs.paddr and vs.sid=32 ;
假設找到的是 serial#=7,spid=9642
刪除session
alter system kill session '31,7';
如果 kill 的時間很久,也可以直接由OS刪除,如我的系統是UNIX:
kill -9 9642
將job的broken恢復成N
exec dbms_job.broken(1640,false);