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