1. 程式人生 > 資料庫 >【Oracle】建立定時任務

【Oracle】建立定時任務

背景:

專案有個前端功能實現依賴於後臺資料庫定時觸發某項任務。

測試環境準備建立此項資料庫任務,以滿足前端的測試。

 

參考:

https://www.cnblogs.com/linjiqin/p/3152638.html

https://www.cnblogs.com/yscit/p/10376005.html

 

Oralce中的任務有2種:Job和Dbms_job,兩者的區別有:

1.  jobs是oracle資料庫的物件, dbms_jobs只是jobs物件的一個例項, 就像對於tables, emp和dept都是表的例項。

2.  建立方式也有差異,Job是通過呼叫dbms_scheduler.create_job包建立的,Dbms_job則是通過呼叫dbms_job.submit包建立的。

3.  兩種任務的查詢檢視都分為dba和普通使用者的,Job對應的查詢檢視是dba_scheduler_jobs和user_scheduler_jobs,dbms_jobs對應的查詢檢視為dba_jobs和user_jobs。

 

主要介紹Dbms_job

BEGIN
DBMS_JOB.SUBMIT(
   JOB OUT BINARY_INTERGER,--輸出變數,是此任務在任務佇列中的編號,也可以自定義,一般不傳
   WHAT IN VARCHAR2,--執行的任務的名稱及其輸入引數
   NEXT_DATE IN DATE DEFAULT SYSDATE,--任務執行的時間
   INTERVAL IN VARCHAR2 DEFAULT NULL,--任務執行的時間間隔
   NO_PARSE IN BOOLEAN DEFAULT FALSE,--用於指定是否需要解析與作業相關的過程
   INSTANCE IN BINARY_INTEGER DEFAULT ANY_INSTANCE,--用於指定哪個例程可以執行作業
   FORCE IN BOOLEAN DEFAULT FALSE--用於指定是否強制執行與作業相關的例程
);
END

 

練習

--1.建立表:
create table testa (cola date);

--2.建立儲存過程:
create or replace procedure testp as
begin
insert into testa values(sysdate);
end;
/

--3.建立job任務(1分鐘執行一次):
variable jobno number;
begin
   dbms_job.submit(:jobno,'testp;', sysdate, 'sysdate+1/24/60');
   commit;
end;
/

--4.檢視任務定時執行結果:
select to_char(cola,'yyyy/mm/dd hh24:mi:ss') 時間 from testa;
--5.跟蹤任務的情況(檢視任務佇列):
select job, next_date, next_sec, failures, broken from user_jobs;
--6.停止定時任務(取上一步的JOB號,停止後Broken變為Y且NEXT_SEC變為0):
begin
   dbms_job.broken(37301, true, sysdate);
   commit;
end;
/

 

 

--7.再次啟動定時任務
begin
dbms_job.run(37301);
end;
/