【Oracle】建立定時任務
阿新 • • 發佈:2020-12-10
背景:
專案有個前端功能實現依賴於後臺資料庫定時觸發某項任務。
測試環境準備建立此項資料庫任務,以滿足前端的測試。
參考:
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; /