Oracle定时任务创建及管理

179 篇文章 18 订阅

一、创建任务执行的存储过程

create or replace procedure trui.Rec_RowNum is
begin
  insert into ROWNUM_Rui  select TABLE_NAME,NUM_ROWS,LAST_ANALYZED  from dba_tables where OWNER='RUI';

end;

二、创建Job

variable job1 number;
begin
 sys.dbms_job.submit(:job1,'trui.Rec_RowNum;', sysdate, 'sysdate+1');----这里直接调用创建好的trui.Rec_RowNum存储过程
 commit; ----避免在plsql中点击提交按钮
end;
/

也可使用PLSQL创建Job,方法如下:
1)右键Jobs文件夹→选择 new
在这里插入图片描述
2)做如下配置

  • What中填写需要执行的procedure名称:rui.Rec_RowNum(注意:结尾要加 ; )
  • Internal中配置时间间隔:sysdate+1

在这里插入图片描述

配置完成后,点击Apply按钮,会弹出如下窗口。
在这里插入图片描述
关闭窗口即可。

三、查看Job

  • sql语句查看

查看当前用户Job

select *  from user_jobs;

查看有权限访问的Job

select *  from all_jobs;

查看整个数据库所有Job

SELECT * FROM dba_jobs;

在这里插入图片描述

注意,如果next_date是4000-1-1表示这个脚本已经是停止状态。

  • 打开Job文件夹查看

在这里插入图片描述

四、手动执行Job

  • sql语句执行

根据ID运行定时job任务,语句如下:

 begin 
  dbms_job.run(jobid); --本例中将jobid替换为1

  commit;
  end; 
  • 图形化执行

右键Job1→选择Run
在这里插入图片描述

五、停用Job

若要停止某定时任务Job,可通过如下方式。

  • sql语句停用
 begin

           dbms_job.broken(jobid,  true,  sysdate);--本例将jobid替换为1

  commit;

  end;
  • 图形化停用

右键Job1→选择Edit
在这里插入图片描述
出现如下窗口
勾选Broken后,单击Apply按钮
在这里插入图片描述
Apply后,会发现Next date变化如下
在这里插入图片描述

六、删除Job

如果要彻底删除Job,可通过如下方式实现。

  • sql语句删除
   begin
               dbms_job.remove(jobid);--本例将jobid替换为1

               commit;
      end;
  • 图形化删除

右键Job1→选择Drop
在这里插入图片描述

在这里插入图片描述

补充内容:任务重复运行间隔设计

在特定时间间隔后,重复运行该任务

‘SYSDATE+n’ – n泛指一个以天为单位的时间间隔 。
例:

描述Interval参数值
每星期运行一次SYSDATE+7
每天运行一次SYSDATE+1
每小时运行一次SYSDATE+1/24
10分钟运行一次SYSDATE+10/(60*24)
每分钟运行一次SYSDATE+1/(60*24)
每30秒运行一次SYSDATE+30/(602460)
每秒运行一次SYSDATE+1/(602460)

注:此任务表达式不能保证任务的下一次运行时间在特定的日期或者时间,只能够指定一个任务两次运行之间的时间间隔。

在特定的日期和时间运行任务

指定特定日期或时间的任务,举例如下:

属性实例 Interval参数值
每分钟执行 TRUNC(sysdate,'mi') + 1/ (24*60)
每小时执行 TRUNC(sysdate,'hh') + 1/ (24)
每天定时执行每天的凌晨1点执行TRUNC(sysdate+ 1) +1/ (24)
每天早上8点30分TRUNC(SYSDATE+1)+(8*60+30)/(24*60)
每周定时执行每周一凌晨1点执行TRUNC(next_day(sysdate,'星期一'))+1/24
每星期二中午12点执行NEXT_DAY(TRUNC(SYSDATE),”TUESDAY”)+12/24
每月定时执行每月1日凌晨1点执行TRUNC(LAST_DAY(SYSDATE))+1+1/24
每月15日的10点25分执行TRUNC(LAST_DAY(SYSDATE))+15+(10*60+25)/(24*60)
每季度定时执行每季度的第1天凌晨1点执行TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
每季度的第5天9点10分执行TRUNC(ADD_MONTHS(SYSDATE,3),'Q') +(9*60+10)/(24*60)
每半年定时执行每年7月1日和1月1日凌晨1点执行ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24
每年8月2日和2月2日7点45分执行ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1+(7*60+45)/(24*60)
每年定时执行每年1月1日凌晨1点执行ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24
每年10月5日8点执行ADD_MONTHS(trunc(sysdate,'yyyy'),12)+9+8/24
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值