资源描述:
《oracle定时执行计划任务》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Oracle定时执行计划任务Oracle在10g版本以前,计划任务用的是DBMS_JOB包,10g版本引入DBMS_SCHEDULER来替代先前的DBMS_JOB,在功能方面,它比DBMS_JOB提供了更强大的功能和更灵活的机制管理,但DBMS_JOB包的使用相对比较简单,也基本能够满足定时执行计划任务的需求,故接下来就先看看DBMS_JOB包的使用方法。1.DBMS_JOB我们可以在命令窗口输入showparameterjob_queue_processes查看数据库中定时任务的最多并发数,一般设置为10(设置方法:altersystemsetjob_q
2、ueue_processes=10),如果设为0,那么数据库定时作业是不会运行的。oracle定时执行jobqueue的后台进程是SNP,要启动snp,首先看系统模式是否支持sql>altersystemenablerestrictedsession;或sql>altersystemdisenablerestrictedsession;利用上面的命令更改系统的会话方式为disenablerestricted,为snp的启动创建条件.接下来我们尝试实现以下功能:每隔一分钟自动向job_test表中插入当前的系统时间。1、创测试表createtablejob_
3、test(updatetimedate);2、创建JOBvariablev_job_nonumber;begindbms_job.submit(:v_job_no,'insertintojob_testvalues(sysdate);',sysdate,'sysdate+1/1440');end;/其中最后一个参数'sysdate+1/1440'表示时间间隔为每分钟。其它常用的时间间隔的设置如下:(1)如果想每天凌晨1点执行,则此参数可设置为'trunc(sysdate)+25/24';(2)如果想每周一凌晨1点执行,则此参数可设置为'trunc(next
4、_day(sysdate,1))+25/24';(3)如果想每月1号凌晨1点执行,则此参数可设置为'trunc(last_day(sysdate))+25/24';(4)如果想每季度执行一次,则此参数可设置为'trunc(add_months(sysdate,3),'Q')+1/24';(5)如果想每半年执行一次,则此参数可设置为'add_months(trunc(sysdate,'yyyy'),6)+1/24';(6)如果想每年执行一次,则此参数可设置为'add_months(trunc(sysdate,'yyyy'),12)+1/24'。select*
5、fromuser_jobs;--查看当前用户的调度任务select*fromdba_jobs_running;--查看正在执行的调度任务select*fromdba_jobs;--查看执行完的调度任务select*fromall_jobs;--查看数据库系统所有任务实例1:1.创建测试表createtablea(adate);2.创建一个存储过程createorreplaceproceduretestasbegininsertintoavalues(sysdate);end;/3.创建JOB(任务计划)variablejob1number;begindbm
6、s_job.submit(:job1,'test;',sysdate,'sysdate+1/1440');end;/--每天1440分钟,即一分钟运行test存储过程一次4.运行JOBbegindbms_job.run(:job1);end;/5.查看执行结果selectto_char(a,'yyyy/mm/ddhh24:mi:ss')时间froma;6.删除JOBbegindbms_job.remove(:job1);end;/job的使用说明:DBMS_JOB.SUBMIT(:jobno,//job号'your_procedure;',//要执行的过程
7、trunc(sysdate)+1/24,//下次执行时间'trunc(sysdate)+1/24+1'//每次间隔时间);删除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);例子:VA
8、RIABLEjobnonumber;beginDBMS_JOB.S