ITPub博客

首页 > 数据库 > Oracle > oracle scheduler任务

oracle scheduler任务

原创 Oracle 作者:sky850623 时间:2014-03-19 21:27:25 0 删除 编辑
一、job有两个组件scheduler和programs
  1.把programs代码和scheduler放在job参数中,不用组件化
  a.创建一个log表用于测试
create table log(
user_name varchar2(10),
user_date date)

b.创建存储过程pro_insert_t 每次执行该过程都会向T表插入一条记录
create or replace procedure pro_insert_t as
begin
  insert into log values (user,sysdate);
end;

c.创建一个job
begin
  DBMS_SCHEDULER.create_job(
                            job_name   => 'exec_procedure',
                            job_type   => 'STORED_PROCEDURE',                     --执行存储过程
                            job_action => 'pro_insert_t',                                        --存储过程名
                            start_date => sysdate,
                            repeat_interval => 'FREQ=minutely;INTERVAL=1;',     --每三分钟执行一次,重复间隔
                            comments   => 'My first job');
end;
d.启动job
exec dbms_scheduler.enable('exec_procedure');
e.查看job运行情况
SQL> select log_id,log_date,job_name,status from user_scheduler_job_run_details;


    LOG_ID LOG_DATE                                                                    JOB_NAME          STATUS
---------- --------------------------------------------------------------------------- -------------------- ----------------
      7243 19-MAR-14 08.48.22.156000 PM +08:00                                         EXEC_PROCEDURE       SUCCEEDED
SQL> select *from log;

USER_NAME  USER_DATE
---------- ------------
SCOTT      19-MAR-14
f.禁用job
SQL> exec dbms_scheduler.disable('exec_procedure');
PL/SQL procedure successfully completed.
g.删除job
begin
dbms_scheduler.drop_job('exec_proc');
end;
/
 2.把scheduler和名字和programs的名字放在job参数中
 每隔1分钟添加一条数据
   1)创建一个表
  create table log(
user_name varchar2(10),
user_date date)
     2)创建一个过程
    create or replace procedure pro_insert_t as
begin
  insert into log values (user,sysdate);
end;
     3)grant create job to scott;
     4)创建program
      begin
      dbms_scheduler.create_program(
                program_name=>'prog1',
                program_action=>'scott.pro_insert_t',
                program_type=>'STORED_PROCEDURE',
                enabled=>true,
                comments=>'first program');
      end;
 SQL> select program_name,program_type,program_action from user_scheduler_programs;

PROGRAM_NAME                   PROGRAM_TYPE     PROGRAM_ACTION
------------------------------ ---------------- ---------------------------------------
PROG1                          STORED_PROCEDURE scott.pro_insert_t
      5)创建scheduler
        begin
dbms_scheduler.create_schedule(
schedule_name=>'scheduler1',
start_date=>systimestamp,
end_date=>systimestamp+1,
repeat_interval=>'freq=minutely;interval=1',
comments=>'every minutely');
end;

SQL> select schedule_name,schedule_type,start_date from user_scheduler_schedules;

SCHEDULE_NAME                  SCHEDULE START_DATE
------------------------------ -------- -----------------------------------------------------
SCHEDULER1                     CALENDAR 19-MAR-14 09.07.21.656000 PM +08:00
      6)创建job
      begin
      dbms_scheduler.create_job
      (
       job_name=>'job1',
       program_name=>'scott.prog1',
       schedule_name=>'scott.scheduler1'
      );
      end;
   
     7)启用job
 SQL> select job_name,enabled from user_scheduler_jobs;

JOB_NAME             ENABL
-------------------- -----
JOB1                 FALSE
EXEC_PROCEDURE       FALSE
      begin
      dbms_scheduler.enable('job1');
      end;
      8)监控job运行状况(user_scheduler_job_run_details)
     SQL> select log_id,log_date,job_name,status from user_scheduler_job_run_details;

    LOG_ID LOG_DATE                                                                    JOB_NAME          STATUS
---------- --------------------------------------------------------------------------- -------------------- ----------------
      7243 19-MAR-14 08.48.22.156000 PM +08:00                                         EXEC_PROCEDURE       SUCCEEDED
      7244 19-MAR-14 08.51.22.125000 PM +08:00                                         EXEC_PROCEDURE       SUCCEEDED
      7245 19-MAR-14 09.15.21.093000 PM +08:00                                         JOB1              SUCCEEDED
      7246 19-MAR-14 09.16.21.109000 PM +08:00                                         JOB1              SUCCEEDED


SQL> select * from log;

USER_NAME  USER_DATE
---------- ------------
SCOTT      19-MAR-14
SCOTT      19-MAR-14
SCOTT      19-MAR-14
SCOTT      19-MAR-14

      9)停用、删除job
      dbms_scheduler.disable('job1');
      dbms_scheduler.drop_job('job1');
      dbms_scheduler.drop_scheduler('SCHEDULER1');
      dbms_scheduler.drop_program('PROG1');
二.查看所有job
dba_scheduler_job
三.监控job运行情况
dba_scheduler_job_run_details

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26937943/viewspace-1125313/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: oracle审计
请登录后发表评论 登录
全部评论

注册时间:2013-05-30

  • 博文量
    154
  • 访问量
    515362