oracle定时任务dbms_job使用

本文展示了如何在Oracle数据库中进行任务管理,包括删除和创建表、存储过程,以及定时任务的创建、启动、停止、修改和删除。详细阐述了DBMS_JOB包的使用,如设置任务执行频率、修改执行操作等,并解释了DBA_JOBS表的重要字段含义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

示例一

/*1.删除表脚本*/
 declare num number ;
 begin
   select
     count (1) into num
   from
     user_tables
   where
     table_name = 'job_test' ;
   if num = 1 then
     execute immediate 'drop table job_test' ;
   end if;
 end;
/*2.创建测试表*/
 create table job_test(id integer,add_time date);

/*3.创建存储过程*/
 create or replace procedure prc_job_test is  
 begin  
   insert into job_test values (1,sysdate);  
   commit;  
 end prc_job_test;

 /*4.删除任务脚本*/
 begin
   for v in(select job from dba_jobs where what = 'prc_job_test;') loop
     dbms_job.remove(v.job);
   end loop;
   commit;
 end;

示例二:

/*5.创建任务*/
 declare  
   tm_job number;  
 begin  
   sys.dbms_job.submit(tm_job,--任务名称  
                       'prc_job_test;',--执行的过程  
                       sysdate,--执行时间  
                       'sysdate+1/(24*60*10)');--下次执行时间  
   commit;
 end;
 /*6、停止定时任务*/
 declare
begin   
   /*停止一个job,jobid, job的id,里面参数true也可是false,next_date(某一时刻停止)也可是sysdate(立刻停止)*/
  dbms_job.broken(4008,true,sysdate);         
commit;
end;
/*7、启动指定定时任务*/
declare
begin
   dbms_job.run(4008); /*4008 job的id*/
   commit;
end;
/*8、删除定时任务*/
declare
begin
  dbms_job.remove(4008);  /*删除自动执行的job,参数是 job的id*/
  commit;
end;
/*9、修改定时任务的间隔时间*/
declare
begin
  /*第一个参数为job的id,第二个参数interval: 计算下一次任务执行的时间表达式*/
  dbms_job.interval(4008,interval => 'trunc(sysdate)+1');  
  commit;
end;
/*10、修改下一次执行时间*/
declare
begin
   /*第一个参数:job的id;第二个参数:要修改后的计算下一次执行的时间表达式*/
   dbms_job.next_date(4008,to_date('2020-12-30 11:00:00','yyyy-mm-dd hh24:mi:ss')); 
   commit;
end;
/*11、修改定时任务要执行的操作*/
declare
begin
   /* 第一个参数:job的id;第二个参数:要更改的新操作名称(操作名必须存在)*/
    dbms_job.what(4008,'testjob2();');  
commit;
end;

附加:

dba_jobs 表中字段含义

JOB任务的唯一标识码
LOG_USER提交任务的用户
PRIV_USER赋予任务权限的用户
SCHEMA_USER对用户作语法分析的用户模式
LAST_DATE最后一次成功执行任务的时间
LAST_SEC最后一次成功执行任务的时间的时分秒
THIS_DATE正在执行的任务的开始时间,若没有则为空
THIS_SECTHIS_SEC 正在执行的任务的开始时间的时分秒,若没有则为空
NEXT_DATE下一次执行定时任务的时间
NEXT_SEC下一次执行定时任务的时间的时分秒
TOTAL_TIME执行当前任务所需要的时间,单位:秒
BROKEN标志参数,Y表示任务中断,以后不会再运行
INTERVAL计算下一次执行定时任务的时间表达式
FAILURES当前定时任务执行失败的总次数
WHAT执行任务的PL/SQL代码块
NLS_ENV任务执行的NLS会话设置
MISC_ENV定时任务运行的其他一些参数设置
INSTANCE标识当前任务运行是否受限,0 没有受限

常用的执行频率

  select sysdate 当前时间,
         sysdate + 1 每天,
         sysdate + 1 / 24 每小时,
         sysdate + 1 / (24 * 60) 每分钟,
         sysdate + 1 / (24 * 60 * 60) 每秒,
         sysdate + 7 每周,
         trunc(sysdate + 1) 每天午夜12点,
         trunc(sysdate + 1) + (8 * 60 + 30) / (24 * 60) 每天早上8点30分,
         -- show parameter nls_date_language;  'TUESDAY'
         next_day(trunc(sysdate), '星期二') + 12 / 24 每星期二中午12点,
         trunc(last_day(sysdate)) + 1 每个月第一天的午夜12点,
         trunc(add_months(sysdate + 2 / 24, 3), 'Q') - 1 / 24 每个季度最后一天的晚上11点,
         -- 周六 saturday,周日 sunday
         trunc(least(next_day(sysdate, '星期六'),
                     next_day(sysdate, '星期日'))) + (6 * 60 + 10) / (24 * 60) 每周六和周日早上6点10分
    from dual;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aries·Zhao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值