lidonghe 发表于 2018-9-24 09:49:15

oracle 如何停job

  停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);
  
selectjob,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       INBINARY_INTEGER,
  
                broken    INBOOLEAN,
  
                next_date INDATE DEFAULT SYSDATE );
  

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

  


[*]--停job过程
[*]SQL> select * from dba_jobs_running;
[*]
[*]       SID      JOB   FAILURES LAST_DATE      LAST_SEC         THIS_DATE      THIS_SEC         INSTANCE
[*]---------- ---------- ---------- -------------- ---------------- -------------- ---------------- ----------
[*]       144         82          0 28-8月 -12   17:42:55         28-8月 -12   17:50:45               0
[*]
[*]SQL> exec dbms_job.broken(82,true);
[*]
[*]PL/SQL 过程已成功完成。
[*]
[*]SQL> commit;
[*]
[*]提交完成。
[*]
[*]SQL> SELECT p.spid FROM v$session s, v$process p
[*]2WHERE s.paddr = p.addr
[*]3AND s.sid = 144;
[*]
[*]SPID
[*]------------
[*]4672
[*]
[*]----------------------------#
[*]--使用操作系统命令
[*]C:\Windows\system32>orakill orcl 4672
[*]----------------------------#
[*]
[*]--如果job还在运行,可以多次执行orakill orcl 4672
[*]SQL> select * from dba_jobs_running;
[*]
[*]未选定行
  



页: [1]
查看完整版本: oracle 如何停job