建立Oracle定時任務及其各項操作
阿新 • • 發佈:2018-11-19
一、PLSQL 建立Oracle定時任務
1、建立任務執行的儲存過程,如名稱為testJob,向測試表中插入資料
// 建立一個sequence物件,提供自增長的序列號 create sequence seq_createId increment by 1 start with 1 nomaxvalue minvalue 1 nocycle nocache; //建立一個儲存過程 create or replace procedure testJob is id number(10); begin SELECT seq_createId.Nextval into id FROM DUAL; insert into TEST_JOB(id,name,age) values(id,'allen',18); end;
2、定時器對應的DBMS_Jobs資料夾,右鍵新建(new)
3、建立任務:
4、檢視任務
select * from dba_jobs
二、 用語句建立
1、建立任務執行的儲存過程,如名稱為testJob,向測試表中插入資料,如文章開頭,此處省略。
2、建立一個 定時任務 job
declare job number; BEGIN DBMS_JOB.SUBMIT( JOB => job, /*自動生成JOB_ID*/ WHAT => 'testJob;', /*需要執行的儲存過程名稱或SQL語句*/ NEXT_DATE => sysdate, /*初次執行時間-立即執行*/ INTERVAL => 'trunc(sysdate,''mi'')+1/(24*60)' /*每隔1分鐘執行一次*/ ); commit; end;
3、查詢定時任務相關欄位資訊
4 、停止定時任務
declare
begin
dbms_job.broken(24,true,sysdate); /*停止一個job,jobId, job的ID,裡面引數true也可是false,next_date(某一時刻停止)也可是sysdate(立刻停止)。 */
commit;
end;
5、啟動指定定時任務
declare
begin
DBMS_JOB.RUN(24); /*24 job的id*/
commit;
end;
6、刪除定時任務
declare begin dbms_job.remove(24); /*刪除自動執行的job,引數是 job的id*/ commit; end;
7、修改定時任務的間隔時間
declare
begin
dbms_job.interval(24,interval => 'TRUNC(SYSDATE)+1'); /*第一個引數為job的ID,第二個引數interval: 計算下一次任務執行的時間表達式*/
commit;
end;
8、修改下一次執行時間
declare
begin
dbms_job.next_date(24,to_date('2020-11-9 12:08:00','yyyy-mm-dd hh24:mi:ss')); /*第一個引數:job的ID;第二個引數:要修改後的計算下一次執行的時間表達式*/
commit;
end;
9、修改定時任務要執行的操作
declare
begin
dbms_job.what(24,'testJob2();'); /* 第一個引數:job的ID;第二個引數:要更改的新操作名稱(操作名必須存在)*/
commit;
end;
三、結
1、dba_jobs 表中欄位含義
dba_jobs 表中欄位含義:
JOB 任務的唯一標識碼
LOG_USER 提交任務的使用者
PRIV_USER 賦予任務許可權的使用者
SCHEMA_USER 對使用者作語法分析的使用者模式
LAST_DATE 最後一次成功執行任務的時間
LAST_SEC 最後一次成功執行任務的時間的時分秒
THIS_DATE 正在執行的任務的開始時間,若沒有則為空
THIS_SEC 正在執行的任務的開始時間的時分秒,若沒有則為空
NEXT_DATE 下一次執行定時任務的時間
NEXT_SEC 下一次執行定時任務的時間的時分秒
TOTAL_TIME 執行當前任務所需要的時間,單位:秒
BROKEN 標誌引數,Y表示任務中斷,以後不會再執行
INTERTAL 計算下一次執行定時任務的時間表達式
FAILURES 當前定時任務執行失敗的總次數
WHAT 執行任務的PL/SQL程式碼塊
NLS_ENV 任務執行的NLS會話設定
MISC_ENV 定時任務執行的其他一些引數設定
INSTANCE 標識當前任務執行是否受限,0 沒有受限
2、INTERVAL 部分引數值示
INTERVAL 部分引數值示例:
每天午夜12點: 'TRUNC(SYSDATE + 1)'
每天早上8點30分: 'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'
每星期二中午12點: 'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'
每個月第一天的午夜12點: 'TRUNC(LAST_DAY(SYSDATE ) + 1)'
每個季度最後一天的晚上11點: 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'
每星期六和日早上6點10分: 'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)'
每月25號00:00執行: 'TRUNC(LAST_DAY(SYSDATE ) + 25)'
--------------------------
1:每分鐘執行
Interval => TRUNC(sysdate,'mi') + 1/ (24*60)
或
Interval => sysdate+1/1440
2:每天定時執行
例如:每天的凌晨1點執行
Interval => TRUNC(sysdate) + 1 +1/ (24)
3:每週定時執行
例如:每週一凌晨1點執行
Interval => TRUNC(next_day(sysdate,'星期一'))+1/24
4:每月定時執行
例如:每月1日凌晨1點執行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24
5:每季度定時執行
例如每季度的第一天凌晨1點執行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
6:每半年定時執行
例如:每年7月1日和1月1日凌晨1點
Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24
7:每年定時執行
例如:每年1月1日凌晨1點執行
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24