oracle job延遲執行

2021-07-10 14:44:19 字數 1453 閱讀 1724

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...