停job就是将job的状态改为broken,然后杀死正在运行的job;将job unbroken可以直接调用exec dbms_job.broken(82,false); 。

1.确定要停止的JOB号
select * from dba_jobs_running;

2.Broken你确认的JOB   
exec dbms_job.broken(82,true);
select  job,log_user,broken,last_date,next_date from dba_jobs where job=82;

3.Kill 对应的Oracle Session
select sid,serial# from v$session where sid=144;
alter system kill session 'sid,serial#';

SELECT p.spid FROM v$session s, v$process p
WHERE s.paddr = p.addr
AND s.sid = 144;
直接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是否还在运行,如果还运行,多杀几次
select * from dba_jobs_running;

5.修改完成后,将job的BROKEN状态停止。
exec dbms_job.broken(82,false); 
 

--手动执行job
exec dbms_job.run(82);

--dbms_job.broken过程定义,next_date参数默认为sysdate,如果不写,从broken到unbroken,
--即调用exec dbms_job.broken(82,false);,会运行对应的job。
PROCEDURE dbms_job.broken( job       IN  BINARY_INTEGER,
                broken    IN  BOOLEAN,
                next_date IN  DATE DEFAULT SYSDATE );

注意:               
调用dbms_job.broken过程,一定要commit;
从broken到unbroken,即调用exec dbms_job.broken(82,false);,会运行对应的job。

 

 
  
  1. --停job过程 
  2. SQL> select * from dba_jobs_running; 
  3.  
  4.        SID        JOB   FAILURES LAST_DATE      LAST_SEC         THIS_DATE      THIS_SEC           INSTANCE 
  5. ---------- ---------- ---------- -------------- ---------------- -------------- ---------------- ---------- 
  6.        144         82          0 28-8月 -12     17:42:55         28-8月 -12     17:50:45               0 
  7.  
  8. SQL> exec dbms_job.broken(82,true); 
  9.  
  10. PL/SQL 过程已成功完成。 
  11.  
  12. SQL> commit
  13.  
  14. 提交完成。 
  15.  
  16. SQL> SELECT p.spid FROM v$session s, v$process p 
  17.   2  WHERE s.paddr = p.addr 
  18.   3  AND s.sid = 144; 
  19.  
  20. SPID 
  21. ------------ 
  22. 4672 
  23.  
  24. ----------------------------# 
  25. --使用操作系统命令 
  26. C:\Windows\system32>orakill orcl 4672 
  27. ----------------------------# 
  28.  
  29. --如果job还在运行,可以多次执行orakill orcl 4672 
  30. SQL> select * from dba_jobs_running; 
  31.  
  32. 未选定行