Oracle数据库创建定时任务

公司有个数据表存储的是文件上传服务器的历史表,有个字段存储的是文件的二进制流,必然要定时删除这个表里面的数据,这个就想到了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后需要提交事物

猜你喜欢

转载自blog.csdn.net/u012526691/article/details/80279962