oracle创建scheduler job dba_job

原创
05/09 11:02
阅读数 47
scheduler job
1.创建
begin
  dbms_scheduler.create_job(job_name            => 'aaa',
                                job_type            => 'STORED_PROCEDURE',
                                job_action          => '存储过程',
                                start_date          => to_date('18-12-2018 01:00:00', 'dd-mm-yyyy hh24:mi:ss'),
                                repeat_interval     => 'Freq=Daily',
                                end_date            => to_date(null),
                                job_class           => 'DEFAULT_JOB_CLASS',
                                enabled             => true,
                                auto_drop           => true,
                                comments            => '');
end;
说明:
    1.JOB_NAME :指定任务的名称,必选值,注意要确保指定的名称唯一。
    2.JOB_TYPE :任务执行的操作类型,必选值,有下列几个可选值:
        PLSQL_BLOCK :表示任务执行的是一个PL/SQL匿名块。
        STORED_PROCEDURE :表示任务执行的是Oracle过程(含PL/SQL PROCEDURE和JAVA PROCEDURE),本例中正是指定这一参数值。
        EXECUTABLE :表示任务执行的是一个外部程序,比如说操作系统命令。
        CHAIN :表示任务执行的是一个CHAIN。
    3.JOB_ACTION :任务执行的操作,必选值,应与JOB_TYPE类型中指定的参数相匹配。比如说对于PL/SQL匿名块,此处就可以放置PL/SQL块的
    具体代表,类似DECLARE .. BEGIN ..END这类;如果是ORACLE过程,那么此处应该指定具体的过程名,注意由于任务执行,即使过程中有OUT
    之类参数,实际执行时也不会有输出的。
    4.START_DATE :指定任务初次执行的时间,本参数可为空,当为空时,表示任务立刻执行,效果等同于指定该参数值为SYSDATE。
    5.REPEAT_INTERVAL :指定任务执行的频率,比如多长时间会被触发再次执行。本参数也可以为空,如果为空的话,就表示当前设定的任务只执
    行一次。REPEAT_INTERVAL参数需要好好说说,REPEAT_INTERVAL参数的语法结构要复杂的多。其中最重要的是FREQ和INTERVAL两个关键字。
        FREQ 关键字用来指定间隔的时间周期,可选参数有:YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, and SECONDLY,
    分别 表示年、月、周、日、时、分、秒等单位。
        INTERVAL 关键字用来指定间隔的频繁,可指定的值的范围从1-99。
    例如:REPEAT_INTERVAL=>'FREQ=DAILY;INTERVAL=1';表示每天执行一次,如果将INTERVAL改为7就表示每7天执行一次,效果等同于        FREQ=WEEKLY;INTERVAL=1。
    6.NUMBER_OF_ARGUMENTS :指定该JOB执行时需要附带的参数的数量,默认值为0,注意当JOB_TYPE列值为PLSQL_BLOCK或CHAIN时,本参
    数必须设置为0,因为上述两种情况下不支持附带参数。
    7.END_DATE :指定任务的过期时间,默认值为NULL。任务过期后,任务的STATE将自动被修改为COMPLETED,ENABLED被置为FALSE。如果该
    参数设置为空的话,表示该任务永不过期,将一直按照REPEAT_INTERVAL参数设置的周期重复执行,直到达到设置的MAX_RUNS或
    MAX_FAILURES值。
    8.JOB_CLASS :指定任务关联的CLASS,默认值为DEFAULT_JOB_CLASS。关于JOB CLASS的信息就关注本系列的后续文章。
    9.ENABLED :指定任务是否启用,默认值为FALSE。FALSE状态表示该任务并不会被执行,除非被用户手动调用,或者用户将该任务的状态修改
    为TRUE。
    10.AUTO_DROP :当该标志被置为TRUE时,ORACLE会在满足条件时自动删除创建的任务
        任务已过期;
        任务最大运行次数已达MAX_RUNS的设置值;
        任务未指定REPEAT_INTERVAL参数,仅运行一次;
    11.COMMENTS :设置任务的注释信息,默认值为NULL。
 
2.删除
begin
  dbms_scheduler.drop_job('aaa');
end ;
3.手动执行
begin
  dbms_scheduler.run_job('aaa');
end ;
3.停止
begin
  dbms_scheduler.stop_job('aaa');
end ;
 
dba_job
1.创建
declare
  job number;
BEGIN
  DBMS_JOB.SUBMIT(  
        JOB => job,  /*自动生成JOB_ID*/  
        WHAT => 'xxx;',  /*需要执行的存储过程名称或SQL语句*/  
        NEXT_DATE => to_date('2018-9-21 0:30:00','yyyy-MM-dd hh24:mi:ss'),  /*初次执行时间-立即执行*/  
        INTERVAL => 'trunc(sysdate)+1+1/48' /*每隔1分钟执行一次*/
      );  
  commit;
end;
 
2.停止
begin   
  dbms_job.broken(61,true,to_date('2018-9-21 0:30:00','yyyy-MM-dd hh24:mi:ss'));   /*停止一个job,jobId, job的ID,里面参数true也可是false,next_date(某一时刻停止)也可是sysdate(立刻停止)。   */
commit;
end;
 
3.删除
begin
  dbms_job.remove(61);  /*删除自动执行的job,参数是 job的id*/
  commit;
end;
 
4.查询
select * from dba_jobs;
 
5.手动运行
begin
  dbms_job.run(61);  /*参数是 job的id*/
  commit;
end;
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部