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;
最主要的是下面的那个 给用户赋予当前用户可以执行存储过程的权限。