1. 程式人生 > >建立Oracle定時任務及其各項操作

建立Oracle定時任務及其各項操作

一、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