oracle job在執行的時候可能會遇到在設定的週期內不能執行完的情況,即前一次還沒有執行完,又到了下一次執行時間。
以下的操作來模擬這種情況,來看一下oracle是怎麼樣處理的。
環境:
1.建立表
create table t_test
( sid number,
dt date
);
2.建立儲存過程,執行一次此過程會往t_test中插一條帶時間的資料,然後sleep 200秒
create or replace procedure p_test
asbegin
insert into t_test(sid, dt) values(sys_context('userenv', 'sid'), sysdate);
commit;
dbms_lock.sleep(200);
end p_test;
/
3.建立job,每分鐘的0秒執行一次
begin
dbms_scheduler.create_job
( job_name => 'job_test',
job_type => 'plsql_block',
job_action => 'begin p_test; end;',
repeat_interval => 'freq=minutely; bysecond=0; interval=1',
enabled => true
);end;
/
4.觀察表中的資料
從t_test中的時間資料基本可以得出oracle的處理方法:
<1>.22:20:00 執行 第一次,啟動job成功
<2>.22:21:00 理論應該執行 第二次,但是此時上一次啟動的job還沒有執行完,所以本次啟動時間會被延後;如果延後到下一次job啟動時間,上一次還沒有執行完,則本次job啟動會被跳過,不再啟動,即job少執行一次
<3>.22:22:00 同22:21:00,此次也被跳過
<4>.22:23:00 本次job啟動沒有按時啟動,因為 22:20:00 啟動的job此時還沒有執行完;22:23:20 第一次啟動的job執行完畢,本次job啟動成功
前一次啟動的job沒有在設定的週期完成,如果在本次job週期內執行完成,則本次job延時啟動;如果在本次job週期內也沒有執行完成,則跳過本次job。
oracle job執行說明
檢視當前任務佇列 select from dba jobs t where t.what like p wap stat rmsx what 為執行任務名稱,可以是儲存過程或其它可執行實體 二.執行時間設定 每天午夜12點 trunc sysdate 1 每天早上8點30分 trunc sysdat...
oracle job不執行,定位問題
一.job的執行頻率設定 1.每天固定時間執行,比如早上8 10分鐘 trunc sysdate 1 8 60 10 24 60 2.toad中提供的 每天 trunc sysdate 1 每週 trunc sysdate 7 每月 trunc sysdate 30 每個星期日 next day t...
Linq to sql 延遲執行
iqueryable query from c in ctx.customers selectc 這樣的查詢句法不會導致語句立即執行,它僅僅是乙個描述,對應乙個 sql。僅僅在 需要使用的時候才會執行語句,比如 iqueryable query from c in ctx.customers sel...