oracle的JOB

前端之家收集整理的这篇文章主要介绍了oracle的JOB前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

前文再续,上面说的oracle的JOB,近期有些体会,记录一下:

零、创建JOB

  1. 创建JOB
  2. 1)创建一个存储过程。逻辑处理都在这个存储过程里面。
  3. 2)创建一个JOB运行此存储过程
  4.  
  5. -- 创建table
  6. create table tab_time( current_time timestamp );
  7.  
  8. -- 创建存储过程
  9. create or replace procedure pro_job_print as begin --dbms_output.put_line('系统时间:' || to_char(sysdate,'dd-mm-yyyy hh24:mi:ss'));
  10. insert into tab_time values(sysdate);
  11. commit;
  12. end;
  13.  
  14. -- 调用过程测试
  15. begin pro_job_print;
  16. end;
  17.  
  18. -- 创建job
  19. declare
  20. job1 number;
  21. begin dbms_job.submit(job1,'pro_job_print;',sysdate,'sysdate+10/86400');--每10秒插入一条记录
  22. end;

注意,创建好的JOB,位于dbms_job下

一、JOB的开启与关闭

  1. --关闭JOB
  2. begin dbms_job.broken(41,true);
  3. commit;
  4. end;
  5.  
  6. --开启JOB
  7. begin dbms_job.broken(41,false);
  8. commit;
  9. end;

二、JOB的运行
最常见的问题:

  1. 假如某JOB的频率是每5分钟运行一次,但它每次运行30分钟,那么5分钟后,会不会有多个JOB(线程)在一起运行?
  2.  
  3. 答:不会。该JOB永远只有一个实例在运行。它每次运行前,会先看看前面有没有在运行,如果没有,则正常运行;有的话,则等待,直到前面那个运行完了之后,紧接着2秒之内启动。

三、JOB的停止

  1. --首先要关闭JOB计划
  2. begin dbms_job.broken(JOB编号,true);
  3. commit;
  4. end;
  5.  
  6. --检查JOB有没有正在运行,停止计划对它没有影响
  7. --获得SID
  8. select * from dba_jobs_running;
  9.  
  10. --获得SID,serial#
  11. select sid,serial#,lockwait,status,wait_time,state from v$session where sid='SID';
  12.  
  13. --杀掉进程
  14. alter system kill session 'SID,serial#';

猜你在找的Oracle相关文章