oracle中定時任務job

2021-10-07 16:15:37 字數 2060 閱讀 8439

oracle中的job能為你做的就是:在你規定的時間格式裡定時執行儲存過程,定時執行乙個任務

–建立job及執行:

variable job2010 number;

begin

dbms_job.submit(:job2010,'spgenchanneluseroneday;',sysdate,'sysdate+1/24');

end;

/begin

dbms_job.run(:job2010);

end;

/commit;

–重啟job(可以用上面那個方式也可以直接啟動)

select * from user_jobs b where b.what like 『%5secdelete%』; 根據儲存過程名字 找出job(數字)

begin

dbms_job.run(356);

end;

/commit;

–停掉job

exec dbms_job.broken(job.id,true);

exec dbms_job.remove(job.id);

commit;

當用exec時需要在命令列視窗執行;當用begin *** end;這種可以在sql視窗執行,實際效果是一樣的

—修改job間隔時間

begin

dbms_job.interval('438','trunc(sysdate,''mi'')+1/24'); /*job job的id,interval: 計算下一次任務執行的時間表示式*/

commit;

end;

job中的小問題(以下部分參考

有些人問,oracle的job在設定完next_date和interval之後,到底是什麼時候決定下一次執行時間的。可以歸納成以下幾個問題。

1. 假設我們的job設定第一次執行的時間是12:00,執行的間隔是1小時,job執行需要耗時30分鐘,那麼第二次執行是在13:00還是13:30?(13:00)

job在執行結束之後才會更新next_date,但是計算的方法是job剛開始的時間加上interval設定的間隔。

則第二次執行是在13:00。

2. 如果是在13:00那是不是說明只要job一開始執行,next_date就被重新計算了?

job在執行結束之後才會更新next_date。一般情況是:next_date=job剛開始的時間+interval設定的間隔,但是當執行時間大於設定的間隔的時候可能直接取當前時間

job的下一次執行時間是會受上一次影響的,如果我們的interval僅僅是sysdate+1/24這樣的形式的話,無疑,上次執行的時間再加上1小時就是下次執行的時間。那麼如果job因為某些原因延遲執行了一次,這樣就會導致下一次的執行時間也同樣順延了,這通常不是我們希望出現的現象。

解決方法很簡單,只需要設定正確的interval就可以了。

比如,我們要job在每天的凌晨3:30執行而不管上次執行到底是幾點,只需要設定interval為trunc(sysdate)+3.5/24+1即可。

4. 假設我們的job設定第一次執行的時間是12:00,執行的間隔是30分鐘,job執行需要耗時1小時,那麼第二次執行是在12:30還是13:00還是根本就會報錯?(13:00)

更新next_date欄位的公式是greatest(:3,

sysdate),此處的:3繫結的是job的this_date+interval。所以我們猜測實際上應該是有乙個跟當前時間的比較機制,如果在執行完job之後的時間比按照this_date+interval計算出的時間更晚一些,那麼next_date就更新為當前時間,也就是幾乎會立刻再重新執行job。

也就是說,next_date,如果job 開始時間+間隔時間 小於 當前時間,那麼則取 當前時間,否則取 開始時間+間隔時間。

Oracle定時任務Job

建立測試用表 create table tb job job name varchar2 5 update dt varchar2 20 新增多個oracle job來併發執行 declare job name varchar2 20 begin dbms output.put line curre...

Oracle中的job定時任務

1.plsql中學習job 學習job 建表 create table test job para date date commit insert into test job values sysdate commit select from test job 建立存貯過程 create orrep...

oracle 建立定時任務job,建立sql

建立定時任務,判斷如果已有這個定時任務,則刪除重建 declare jobnum number 5 0 jobid number 5 0 begin 查是否已經存在,排程的job select count into jobnum from dba jobs where upper what like...