一、创建任务执行的存储过程
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
查看当前用户Job
select * from user_jobs;
查看有权限访问的Job
select * from all_jobs;
查看整个数据库所有Job
SELECT * FROM dba_jobs;
注意,如果next_date是4000-1-1表示这个脚本已经是停止状态。
四、手动执行Job
根据ID运行定时job任务,语句如下:
begin
dbms_job.run(jobid); --本例中将jobid替换为1
commit;
end;
右键Job1→选择Run
五、停用Job
若要停止某定时任务Job,可通过如下方式。
begin
dbms_job.broken(jobid, true, sysdate);--本例将jobid替换为1
commit;
end;
右键Job1→选择Edit
出现如下窗口
勾选Broken后,单击Apply按钮
Apply后,会发现Next date变化如下
六、删除Job
如果要彻底删除Job,可通过如下方式实现。
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 |