job定時啟動的問題

didiaodezhu 2009-12-16 09:41:47
要把dbms_job每天分3個時段執行 8:30 9:00 9:30
有個辦法是有每半小時執行一次 但是 一天下來 除了這3個時段外的都沒有意義
job能不能指定到3個時間段的



問題2
之前我定義了一個job 是8:12執行的 每小時執行一次 每次執行要用5分鐘 半個月job的執行時間變為8.49分
是不是job的下一次執行時間為這次執行完成后的時間再加上每次執行的時間
如 8:12執行 8:16完成 那下一次的時間是不是為9:16的
...全文
238 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hebo2005 2009-12-16
  • 打赏
  • 举报
回复
不过你个SCHED JOB不太好定义,因为你是半小时执行一次,用SCHED JOB的话,8:00,8:30,9:00,9:30都会执行的

问题2,如果你不是SYSDATE+1/24的话,则每次都会准时,不管执行时间需要多少,从开始时间计算
如果是用SYSDATE的话,会有累积误差
hebo2005 2009-12-16
  • 打赏
  • 举报
回复
这是我们用的SCHED JOB

BEGIN
SYS.DBMS_SCHEDULER.CREATE_JOB
(
job_name => 'SCH_JOB_AP030'
,start_date => TO_TIMESTAMP_TZ('2009/03/31 15:45:00.000000 +08:00','yyyy/mm/dd hh24:mi:ss.ff tzh:tzm')
,repeat_interval => 'FREQ=WEEKLY; BYDAY=MON,TUE,WED,THU,FRI;BYHOUR=9,10,11,13,14,15,16,17;
BYMINUTE=15,45;BYSECOND=0'

,end_date => NULL
,job_class => 'DEFAULT_JOB_CLASS'
,job_type => 'PLSQL_BLOCK'
,job_action => 'BEGIN
SP_MAKE_AP030
( );
END;'
,comments => '上班时间每半时更新次AP030'
);
SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
( name => 'SCH_JOB_AP030'
,attribute => 'RESTARTABLE'
,value => FALSE);
SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
( name => 'SCH_JOB_AP030'
,attribute => 'LOGGING_LEVEL'
,value => SYS.DBMS_SCHEDULER.LOGGING_RUNS);
SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL
( name => 'SCH_JOB_AP030'
,attribute => 'MAX_FAILURES');
SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL
( name => 'SCH_JOB_AP030'
,attribute => 'MAX_RUNS');
BEGIN
SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
( name => 'SCH_JOB_AP030'
,attribute => 'STOP_ON_WINDOW_CLOSE'
,value => FALSE);
EXCEPTION
-- could fail if program is of type EXECUTABLE...
WHEN OTHERS THEN
NULL;
END;
SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
( name => 'SCH_JOB_AP030'
,attribute => 'JOB_PRIORITY'
,value => 3);
SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL
( name => 'SCH_JOB_AP030'
,attribute => 'SCHEDULE_LIMIT');
SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
( name => 'SCH_JOB_AP030'
,attribute => 'AUTO_DROP'
,value => FALSE);

SYS.DBMS_SCHEDULER.ENABLE
(name => 'SCH_JOB_AP030');
END;
/

hebo2005 2009-12-16
  • 打赏
  • 举报
回复
用SCHED JOB
andyguan01_2 2009-12-16
  • 打赏
  • 举报
回复
试试这样可以不:

begin
sys.dbms_job.submit(job => :job,
what => 'begin
if to_char(sysdate, ''hh24mi'') in (''0830'', ''0845'', ''0900'', ''0915'') then
存储过程名;
end if;
end;',
next_date => to_date('16-12-2009 17:15:03', 'dd-mm-yyyy hh24:mi:ss'),
interval => 'sysdate + 15/(24*60)');
commit;
end;
didiaodezhu 2009-12-16
  • 打赏
  • 举报
回复
將這個參數改為 repeat_interval => 'FREQ=minutely; BYSECOND=11'
就能實現1分鐘執行一次

http://space.itpub.net/7607759/viewspace-612589
這里有詳細的解釋
didiaodezhu 2009-12-16
  • 打赏
  • 举报
回复
按你的例子作了以下改動
BEGIN
DBMS_SCHEDULER.CREATE_JOB
(
job_name => 'job1216'
,start_date => TO_TIMESTAMP_TZ('2009/12/16 15:45:00.000000 +08:00','yyyy/mm/dd hh24:mi:ss.ff tzh:tzm')
,repeat_interval => 'FREQ=minutely; BYDAY=0;BYHOUR=0;
BYMINUTE=1;BYSECOND=1'
,end_date => NULL
,job_type => 'PLSQL_BLOCK'
,job_action => 'BEGIN
PR1216 //存儲過程名
( );
END;'
,comments => '備注內容??'
);
END;

如果想要從12月16日開始每天的8:30 ,8.:45,9:00,9:15都執行一次
start_date,repeat_interval 要如何設置
現在想先做個測試 每分鐘執行一次的話 又要如何設置

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧