oracle資料庫定時任務

2021-08-04 23:55:49 字數 3175 閱讀 6977

不久前,做的專案中需要用到定時任務(有兩種實現方式:應用程式,資料庫。),決定採用資料庫的定時任務。關於資料庫定時任務的資料,網上有很多文章,但當自己在設計時,並沒有僅通過一篇文章就解決問題。於是決定綜合網上資料和自己的專案,寫一篇oracle資料庫自帶的job來實現定時任務。

一、定時任務的建立、啟動、修改、停止、刪除

1、首先需建立一儲存過程,然後讓定時任務按照設定的時間和時間間隔去執行儲存過程。

variable jobno number;——系統會自動分配乙個任務號jobno(在此段**執行完成後,即可顯示出jobno,如22)

dbms_job.submit(:jobno, ——自動分配的

jobno號 ,前邊必須有:號

your_procedure;',——需執行的儲存過程, ';'不能省略 varchar型別

next_date, ——下次執行時間  date型別

'interval' ,——每次間隔時間,interval以天為單位 varchar型別

(interval的引數問題,可參見第二部分)

no_parse——可不配置 布林型別

); 

no_parse引數指示此工作在提交時或執行時是否應進行語法分析——true 指示此pl/sql**在它第一次執行時應進行語法分析, 而false指示本pl/sql**應立即進行語法分析。

上述執行完成後,會顯示

pl/sql procedure successfully completed

jobno

---------

22如:

variable jobno numberb;

begin

dbms_job.submit(:jobno,'proce_receivedorder;',sysdate,'trunc(sysdate) + 1 +14 / (24)'); (每天14點執行)

commit;

end;;

2、啟動定時任務

執行如下**:

begin 

dbms_job.run(22);(此處22為,第一步執行後,顯示出來的jobno)

commit;

end;

3、檢視定時任務

select job, next_date, next_sec, failures, broken from user_jobs;

如果資訊正確,即建立成功。

4、修改定時任務:

1) 修改要執行的操作

: dbms_job.what(jobno, what);  

2) 修改下次執行時間

:dbms_job.next_date(jobno, next_date);  

3) 修改間隔時間

:dbms_job.interval(jobno, interval);如:

begin

dbms_job.next_date (22, trunc(sysdate) + 1 +14 / (24) );

commit;

end;

5、停止和刪除定時任務

1)停止:dbms_job.broken(jobno, broken, nextdate); –broken為boolean值 

如:begin

dbms_job.broken(22,true,sysdate);

commit;

end;

2)刪除:dbms_job.remove(jobno);  如:

begin

dbms_job.

remove(22);

commit;

end;

二、interval引數 1:

每分鐘執行

trunc(sysdate,'mi') + 1/(24*60) 2:

每天定時執行

例如:每天的凌晨1點1分1秒執行trunc(sysdate) + 1 +1/(24)+1/24/60+1/24/60/60

3:每週定時執行

例如:每週一凌晨1點執行

trunc(next_day(sysdate,

2))+2/

24 --星期一,一周的第二天

trunc(next_day(sysdate,'星期一'))+1/24

4:每月定時執行

例如:每月1日凌晨1點執行

trunc(last_day(sysdate))+1+1/24

5:每季度定時執行

例如每季度的第一天凌晨1點執行

trunc(add_months(sysdate,3),'q') + 1/24

6:每半年定時執行

例如:每年7月1日和1月1日凌晨1點

add_months(trunc(sysdate,'yyyy'),6)+1/24

7:每年定時執行

例如:每年1月1日凌晨1點執行

add_months(trunc(sysdate,'yyyy'), 12)+1/24

8.每個小時的第15分鐘執行

例如:8:15,9:15,10:15…:

trunc(sysdate,'hh')+(60+15)/(24*60)。

注:trunc(for dates) 函式一些說明

trunc函式按一定格式擷取日期的值。 

語法如下: 

trunc(date[,fmt]) 其中fmt引數可無,預設為擷取天

1)按年擷取顯示當年第一天

select  trunc(sysdate,'yyyy')  from dual 

2)按月截尾 顯示當年當月第一天

select  trunc(to_date('2008-03-01 08:23','yyyy-mm-dd hh:mi'),'mm')  from dual 

3)按日截尾 顯示當年當月當日

select  trunc(to_date('2008-03-01 08:23','yyyy-mm-dd hh:mi'),'dd')  from dual 

4)按時截尾 顯示當年當月當日當時0分0秒

select  trunc(to_date('2008-03-01 08:23','yyyy-mm-dd hh:mi'),'hh')  from dual 

5)按分截尾 顯示當年當月當日當時當分0秒

select  trunc(to_date('2008-03-01 08:23','yyyy-mm-dd hh:mi'),'mi')  from dual 

oracle資料庫定時任務

常要oracle資料庫定時的自動執行一些指令碼,或做資料庫備份,或做資料的提煉,或做資料庫的效能優化,包括重建索引等等的工作,這時需要用到乙個函式dbms job.submit,來完成oracle定時器job時間的處理上。使用dbms job.submit這個函式,我們只需要考慮兩個事情 安排某一任...

oracle資料庫定時任務

1.定時任務樣例 一 建立乙個表 create table t free twice id number 8 primary key,name nvarchar2 20 二 建立序列 記錄id值 create sequence create sequence t free twice log min...

Oracle資料庫定時任務

查詢當前 本賬戶 已有的定時任務 select job,broken,what,interval,t.from user jobs t 刪除定時某個任務 begin dbms job.remove 24 上乙個語句查詢出的定時任務編號 commit end 建立乙個新的定時任務 declare mt...