ORACLE创建定时任务及定时任务不执行的原因

博客围绕Oracle定时任务不执行问题展开。先介绍创建表、存储过程及定时任务job的步骤,发现任务不执行。经排查,一是job_queue_processes临界值为0,修改后任务自动执行;二是手动执行job报错,可能是权限问题,给用户赋予执行job和存储过程的权限。

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

1、首先创建一张表 该表用来执行插入数据。

create table getSysDate(test date);

2、创建存储过程以插入数据。

create or replace procedure insertSysDate as 
begin 
insert into getSysDate values (sysdate);
end ;

3、创建job设置定时

declare
job1 number;
begin
dbms_job.submit(job1,'insertSysdate;',TO_DATE('2019-07-09 15:55:00','YYYY-MM-DD HH24:MI:SS'),'sysdate+1/1440');
commit;
end;

以上为所创建的job,job1为job名称 ,insertSysdate为存储过程名称,TO_DATE('2019-07-09 15:55:00','YYYY-MM-DD HH24:MI:SS')这段为存储过程下次执行时间,'sysdate+1/1440' 这段为存储过程执行时间间隔。

当我把以上所有的步骤都走完之后,发现表中并没有新的数据,然后我又通过"SELECT * FROM DBA_JOBS"该语句查看新建的job,发现job是已经创建成功了的,不过上次执行时间为空。

4、而后我又通过以下语句执行job,看是否有问题。

begin
dbms_job.run(9);
end;

执行过后发现表中有数据,那就是job没什么问题,但是系统中可能有些地方没设置正确。

5、然后我又通过以下语句修改job下次执行时间,改完当前时间后的几分钟,几分钟后,发现还是没有执行成功。

begin
dbms_job.next_date(9, TO_DATE('2019-07-09 16:30:00','YYYY-MM-DD HH24:MI:SS'));
end;

6、最后在网上查找原因,发现了一个哥们的博客,真的是救命。

select value from v$parameter where name like '%job_queue_processes%' 

该语句可以查看你的当前用户下执行job的临界值,当我查看之后发现为0,也就是说我的job一个都不能执行。

于是我果断用以下语句将临界值修改为100。

alter system set job_queue_processes =100;

然后发现我的job已经开始自动执行了,应该是这个临界值默认就是0,而后需要自己修改,真的是个大坑,浪费了我一下午的时间。

最近又出现了一个大坑  就是 我手动执行job的时候 会出现以下的错误

而后,我在SYS下面创建job,在SYS下面执行job,发现执行是成功的,这时候发现可能是权限的问题,于是又给我当前用户赋予执行job的权限。

grant create job to orace_user1;

grant manage scheduler to orace_user1;

GRANT EXECUTE ON DBMS_JOB TO USER;

最主要的是下面的那个 给用户赋予当前用户可以执行存储过程的权限。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值