公司有个数据表存储的是文件上传服务器的历史表,有个字段存储的是文件的二进制流,必然要定时删除这个表里面的数据,这个就想到了oracle里面的定时任务。
我们使用的数据库连接工具是pl/sql Developer 我的是汉化版本的
选择文件—新建—命令窗口(一般的sql窗口无法创建 job)
建表语句这里就补贴出来了
编写存储过程sql (删除2天之前的数据)
`create or replace procedure del_file_his is
begin
delete from T_DZBD_FILE_HISTORY t where (sysdate-t.createtime)>2;
commit;
end del_file_his;`
创建一个job用到的函数是sys.dbms_job.submit()函数(1分钟执行一次)
begin
2 dbms_job.submit(:job_del_file_his,'DEL_FILE_HIS;', sysdate, 'sysdate+1/24/60');
3 commit;
4 end;
5 /
成功后返回
PL/SQL procedure successfully completed
job_del_file_his
---------
23
跟踪任务的情况(查看任务队列):
select job, next_date, next_sec, failures, broken from user_jobs;
JOB NEXT_DATE NEXT_SEC FAILURES BROKEN
---------- ----------- ---------------- ---------- ------
23 2018/5/11 1 10:57:10 0 N
修改定时时间
begin
2
3 dbms_job.interval(23,'TRUNC(SYSDATE + 1)');
4
5 end;
6
7
7 /
删除job:dbms_job.remove(jobno);
修改要执行的操作: job:dbms_job.what(jobno,what);
修改下次执行时间: dbms_job.next_date(job,next_date);
修改间隔时间: dbms_job.interval(job,interval);
停止job:dbms.broken(job,broken,nextdate);
启动job:dbms_job.run(jobno);
*/
每天午夜12点 ‘TRUNC(SYSDATE + 1)’
每天早上8点30分 ‘TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)’
每星期二中午12点 ‘NEXT_DAY(TRUNC(SYSDATE ),”TUESDAY” ) + 12/24’
每个月第一天的午夜12点 ‘TRUNC(LAST_DAY(SYSDATE ) + 1)’
每个季度最后一天的晚上11点 ‘TRUNC(ADD_MONTHS(SYSDATE + 2/24,3 ), ‘Q’ ) -1/24’
每星期六和日早上6点10分 ‘TRUNC(LEAST(NEXT_DAY(SYSDATE, ”SATURDAY”), NEXT_DAY(SYSDATE,”SUNDAY”))) + (6×60+10)/(24×60)’
注意建立job后需要提交事物