Oracle定时任务(JOB)

本文介绍了Oracle数据库创建定时任务(job)的方法,包括直接创建和使用存储过程创建。还说明了查询、删除、修改执行时间、停止定时任务以及修改job执行操作的具体语句。此外,针对创建后任务未执行、停止后又重启等常见问题给出了解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

oralce提供了一个很简便的创建定时任务的方法,即创建job,这是数据库级别的定时任务,运行时间全部由数据库控制,因此省去了开发人员的很多烦恼。

一.创建定时任务

创建的方式有两种:

1.直接创建job
可以使用以下创建语句(创建完之后会根据时间执行任务):
declare
jobno number;
begin dbms_job.submit(
  jobno,–定时器ID,系统自动获得
  ‘proc_name;’, --执行的存储过程名
   sysdate,–定时器开始执行的时间,这样写表示立即执行
  ‘sysdate + 15/1440’–设置定时器执行的频率,这样写每隔15分钟执行一次
);
commit;
end;

2.使用存储过程创建
创建完后需要手动执行存储过程,才会生效定时任务
create or replace procedure PROC_CREATE_JOB as
begin
declare
job number;
BEGIN
dbms_job.submit(job,–定时器ID,系统自动获得
‘proc_name;’, – 需要执行的存储过程名
sysdate, – 第一次执行的时间,sysdate表示立即执行
‘TRUNC(SYSDATE+1)+2/24’ – 下一次执行时间
);
COMMIT;
DBMS_JOB.RUN(job);
END;
end;

二.查询定时任务

select * from user_jobs;–查看调度任务
select * from dba_jobs_running;–查看正在执行的调度任务
select * from dba_jobs;–查看执行完的调度任务

三.删除定时任务

begin
dbms_job.remove(83);–83是指定时器id,通过查询定时任务获得
commit;
end;

四.修改定时任务执行时间

修改间隔时间:
begin
DBMS_JOB.INTERVAL(24, ‘sysdate + 60/1440’);–24指的是定时器id,,通过查询定时任务获得
commit;
end;
修改下次执行时间:
begin
DBMS_JOB.next_date (24, ‘sysdate + 60/1440’);–24指的是定时器id,,通过查询定时任务获得
commit;
end;

五.停止定时任务

begin
dbms_job.broken(24,true); --true表示停止,false表示启用
commit;
end;

六.修改job要执行的操作

begin
dbms_job.what(111,‘proc_name;’)
commit;
end;

七.可能会遇到的一些问题

1.创建定时任务成功,但定时任务为什么没有执行?
1)可能是执行任务的job 的临界值太小的原因,可直接使用以下语句进行查看
select value from v$parameter where name like ‘%job_queue_processes%’;
查询出来的值如果过小或为0(0代表job都不生效),则需要将该值增大,使用以下语句
alter system set job_queue_processes =100;
临界值可按目前job的数量进行具体的修改,如果job数量超过100个,那么第101个就不会执行了
2)查看该定时任务的NEXT_DATE时间是否是4000/1/1,如果是的话,查看broken状态是否是Y,是的话更改broken状态,使用如下命令:
begin
dbms_job.broken(24,false);
commit;
end;
2.停止(broken)定时任务后,为什么又重新启动了?
可能是因为是在运行过程中停止。
经测试,如果在job运行过程中执行了broken语句,在当时你查询的时候broken状态是Y,但是等定时任务执行完后,再去查看,会发现broken状态又变回了N(表示未停止)。
因此,务必在job执行完成后再停止定时任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值