本人在oracle里写了3个定时器,都是在凌晨2点执行。
但是一开始执行了1次,后面就都不执行了。RUN了。也不行。
delare jobno number;
begin
dbms_job.submit(jobno,what=>'test;',next_date=>trunc(sysdate),interval=>'trunc(sysdate)+1+2/(24)');
commit;
end;begin
dbms_job.run(1);
end;
test为存储过程的名字, dbms_job.run(1);是开始这个定时器。
但是这样他在凌晨2点的时候并没有运行。
在此求教。
oracle10g
有更好的方法的也请赐教一下。
谢谢
但是一开始执行了1次,后面就都不执行了。RUN了。也不行。
delare jobno number;
begin
dbms_job.submit(jobno,what=>'test;',next_date=>trunc(sysdate),interval=>'trunc(sysdate)+1+2/(24)');
commit;
end;begin
dbms_job.run(1);
end;
test为存储过程的名字, dbms_job.run(1);是开始这个定时器。
但是这样他在凌晨2点的时候并没有运行。
在此求教。
oracle10g
有更好的方法的也请赐教一下。
谢谢
看看job的BROKEN列是不是设置成Y了?
是N,
我本地的oracle9i,有个同事本地的是10g
我们两本地的就执行的很好。没有问题。但是服务器上的就是不行
dbms_job.run(1);
end;这里后面加上commitbegin
dbms_job.run(1);
commit;
end;
记得dbms_job的每个方法之后都要commit.你的job是凌晨2点,你是调服务器时间来看有没有执行吗?
刚才你说要加上commit,
我就吧时间换成5分钟一执行.但是还是不可以
begin
dbms_job.submit(jobno,what=>'test;',next_date=>trunc(sysdate),interval=>'trunc(sysdate)+1+2/(24)');
commit;
end;后面加上 /
begin
dbms_job.submit(jobno,what=>'test;',next_date=>trunc(sysdate),interval=>'trunc(sysdate)+1+2/(24)');
commit;
end;
/
begin
dbms_job.run(1);
end;
/
2 begin
3 insert into job_log values(sysdate);
4 commit;
5 end;
6 /Procedure created.SQL> declare
2 jobno number;
3 begin
4 dbms_job.submit(jobno,what=>'test;',
5 next_date=>trunc(sysdate),interval=>'sysdate+1/(24*60)');
6 dbms_output.put_line(jobno);
7 commit;
8 end;
9 /
2537650PL/SQL procedure successfully completed.SQL> begin
2 dbms_job.run(2537650);
3 commit;
4 end;
5 /PL/SQL procedure successfully completed.SQL> select * from job_log order by dt;DT
---------
2012-09-26 16:27:42
2012-09-26 16:27:55
2012-09-26 16:28:58
2012-09-26 16:29:58
2012-09-26 16:30:58
你的结果不对,可能是
1)interval指定有问题。改成5分钟后,不要再trunc(sysdate),否则变成一个过去的时间。
2)test过程有问题。
这样不行哦.
这样组合运行的那.
run里面并不知道job的ID
无法填.
如果个运行的话就会报 / 的错误.
dbms_job.run(1);
end;
/delare jobno number;
begin
dbms_job.submit(jobno,what=>'test;',next_date=>trunc(sysdate),interval=>'trunc(sysdate)+1+2/(24)');
commit;
end;
/
那这样试试
不执行,
存储过程是没问题的
我直接begin test; end; 运行,都是没问题的
同学 你的 服务器的参数 job_queue_process 是不是设置成0 了。
show parameter job_queue_process
这个参数是0的话job 相当于关闭了 job 功能,肯定不会自动执行了
oracle10g开始,推荐大家使用 dbms_scheduler 了,因此把这个参数默认设置成0了。。
还真是这个....
谢谢你了.
请问下你会写:dbms_scheduler
会的话帮我写个凌晨2点执行存储过程吧.
这个东西我不会写.
oracle10g开始出现的schedule
包含对象(列举三个):jobs、program、schedule
之间关系:schedule 负责调度,即什么时候执行
program 负责做什么,即执行什么东西
job 负责做,即在schedule规定的调度下,执行program
当然还有其他对象概念, 如窗口(window) 链(chain)等
用这个包可以更好的控制数据库资源的使用情况,但是需要统筹规划,这也是未来的趋势,不过目前看,你的这个功能还真不需要
先要赋予create job权限,例如
grant create job to dreams1208;然后执行
begin
dbms_scheduler.create_job(
job_name=>'job_test',
job_type=>'STORED_PROCEDURE',
job_action=>'test',
repeat_interval=>'FREQ=DAILY;BYHOUR=2;BYMINUTE=0;BYSECOND=0',
enabled=>true);
end;