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

2021-08-31 09:21:18 字數 4427 閱讀 6428

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、檢視任務

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

oracle建立定時任務

oracle建立三個定時任務,每個小時呼叫一次report hour,每天呼叫一次report day,每個月呼叫一次report month declare job1 number job2 number job3 number begin sys.dbms job.submit job job1...

Oracle建立定時任務

開啟命令列操作一下步驟 1 sqlplus as sysdba 2 conn 使用者名稱 密碼 3 variable job num 4 begin dbms job.submit job num,testjob trunc sysdate 23 24,trunc sysdate 23 24 end...

Oracle建立定時任務

開啟命令列操作一下步驟 1 sqlplus as sysdba 2 conn 使用者名稱 密碼 3 variable job num 4 begin dbms job.submit job num,testjob trunc sysdate 23 24,trunc sysdate 23 24 end...