Oracle定时执行计划任务. 下载本文

Oracle 定时执行计划任务

Oracle 在 10g 版本以前, 计划任务用的是 DBMS_JOB包, 10g 版本引入 DBMS_SCHEDULER来替代先前的 DBMS_JOB,在功能方面 , 它比 DBMS_JOB提供了更强大的功能和更灵活的机制 管理, 但 DBMS_JOB包的使用相对比较简单, 也基本能够满足定时执行计划任务的需求, 故 接下来就先看看 DBMS_JOB包的使用方法。

1. DBMS_JOB

我们可以在命令窗口输入 show parameter job_queue_processes查看数据库中定时任务 的最多并发数,一般设置为 10(设置方法:alter system set

job_queue_processes=10 ,如果 设为 0,那么数据库定时作业是不会运行的。

oracle 定时执行 job queue 的后台进程是 SNP , 要启动 snp, 首先看系统模式是否支持 sql> alter system enable restricted session;或 sql> alter system disenable restricted session; 利用上面的命令更改系统的会话方式为 disenable restricted,为 snp 的启动创建条件 .

接下来我们尝试实现以下功能:每隔一分钟自动向 job_test表中插入当前的系统时间。 1、创测试表

create table job_test(updatetime date; 2、创建 JOB

variable v_job_no number; begin

dbms_job.submit(:v_job_no, 'insert into job_test values(sysdate;', sysdate, 'sysdate+1/1440';

end; /

其中最后一个参数 'sysdate+1/1440'表示时间间隔为每分钟。其它常用的时间间隔的 设置如下:

(1如果想每天凌晨 1点执行,则此参数可设置为 'trunc(sysdate+25/24'; (2如果想每周一凌晨 1点执行,则此参数可设置为 'trunc(next_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 * from user_jobs;--查看当前用户的调度任务 select * from dba_jobs_running;--查看正在执行的调度任务 select * from dba_jobs;--查看执行完的调度任务 select * from all_jobs; -- 查看数据库系统所有任务 实例 1: 1. 创建测试表 create table a(a date; 2. 创建一个存储过程

create or replace procedure test as begin

insert into a values(sysdate; end; /

3. 创建 JOB (任务计划 variable job1 number; begin

dbms_job.submit(:job1,'test;',sysdate,'sysdate+1/1440'; end; /