1、执行创建(以表STRAININFO的JOB为例):
①每天6点执行一次
declare jobno number;
begin
dbms_job.submit(jobno,'DELETE_STRAININFO;',trunc(sysdate+1)+6/24,'Trunc(Sysdate+1)+1+6/24');
COMMIT;
END;
②每天12点执行一次
declare jobno number;
begin
dbms_job.submit(jobno,'DELETE_STRAININFO;',trunc(sysdate+1)+12/24,'Trunc(Sysdate+1)+1+12/24');
COMMIT;
END;
③每天18点执行一次
declare jobno number;
begin
dbms_job.submit(jobno,'DELETE_STRAININFO;',trunc(sysdate+1)+18/24,'Trunc(Sysdate+1)+1+18/24');
COMMIT;
END;
④每天0点执行一次
declare jobno number;
begin
dbms_job.submit(jobno,'DELETE_STRAININFO;',trunc(sysdate+1),'Trunc(Sysdate+1)+1');
COMMIT;
END;
2、JOB的知识点 :
(1)、删除job: dbms_job.remove(jobno);
(2)、修改要执行的操作: job:dbms_job.what(jobno, what);
(3)、修改下次执行时间:dbms_job.next_date(jobno, next_date);
(4)、修改间隔时间:dbms_job.interval(jobno, interval);
(5)、启动job: dbms_job.run(jobno);
(6)、停止job: dbms.broken(jobno, broken, nextdate);
——broken为boolean值,nextdate可以是某一时刻停止,也可是sysdate(立刻停止)。
(7)、查看所有job:select * from sys.user_jobs;
(8)、使用下面的SQL查询是否JOB还在Running,前提是需要job执行时间不能过短:
select * from dba_jobs_running;
3、如何完整的跟踪作业的情况
select job, next_date, next_sec, failures, broken from user_jobs;
(1)、立即停止一个已经启动的定时作业
begin
dbms_job.broken(48, true, sysdate);
commit;
end;
执行完之后跟踪:select job, next_date, next_sec, failures, broken from user_jobs;
(2)、立即启动定时作业
begin
dbms_job.run(25);
commit;
end;
执行完之后跟踪:select job, next_date, next_sec, failures, broken from user_jobs;
4、JOB的执行时间
(1)、每分钟执行:Interval => TRUNC(sysdate,'mi') + 1/(24*60)
(2)、每天定时执行,如每天的凌晨1点执行:Interval => TRUNC(sysdate) + 1 +1/(24)
(3)、每天凌晨零点执行:Interval => trunc(sysdate+1)
(4)、每周:trunc(sysdate+7)
(5)、每周定时执行,如每周一凌晨1点执行:Interval => TRUNC(next_day(sysdate,'星期一'))+1/24
(6)、每月:trunc(sysdate+30)
(7)、每天6点:trunc(sysdate+1)+6/24
(8)、每半个小时执行一次:sysdate+30/(24*60)