首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle DBMS_JOB 排程實戰:建立 Procedure 與週期性執行完整範例

     編輯:Oracle 資料庫基礎

DBMS_JOB 是 Oracle 內建排程器(10g 後建議改用 DBMS_SCHEDULER),本文提供從建立存儲過程到提交週期性 Job 的完整可執行範例。

1. 建立備份歸檔 Procedure

CREATE PROCEDURE bertelsmann AS
BEGIN
  INSERT INTO record SELECT * FROM cussent
  WHERE adddate <= TRUNC(ADD_MONTHS(SYSDATE, -3));
  DELETE FROM cussent
  WHERE adddate <= TRUNC(ADD_MONTHS(SYSDATE, -3));
  COMMIT;
END;
/
-- 功能:將 3 個月前資料歸檔至 RECORD 表並從 CUSSENT 刪除

2. 提交 Job(每分鐘執行一次,測試用)

DECLARE
  v_job NUMBER := 1;
BEGIN
  DBMS_JOB.SUBMIT(v_job, 'bertelsmann;', SYSDATE, 'SYSDATE + 1/1440');
  COMMIT;
END;
/
-- 參數:job 號、what(過程名)、next_date(首次執行)、interval(間隔)
-- 1/1440 = 1天/24小時/60分 = 1分鐘

3. 常用管理指令

-- 查看作業
SELECT * FROM USER_JOBS;
SELECT * FROM ALL_JOBS;

-- 立即執行
EXEC DBMS_JOB.RUN(job_no);

-- 停用/啟用
EXEC DBMS_JOB.BROKEN(job_no, TRUE);   -- 停用
EXEC DBMS_JOB.BROKEN(job_no, FALSE);  -- 啟用

-- 修改下次執行時間
EXEC DBMS_JOB.NEXT_DATE(job_no, SYSDATE + 1);

-- 修改執行內容
EXEC DBMS_JOB.WHAT(job_no, 'new_proc;');

-- 移除作業
EXEC DBMS_JOB.REMOVE(job_no);

4. 排程時間表達式速查

頻率next_date (首次)interval (間隔)
每天 02:10:10TRUNC(SYSDATE)+2/24+10/1440+10/86400TRUNC(SYSDATE+1)+2/24+10/1440+10/86400
每月 2 號 02:10:10TRUNC(SYSDATE,'MM')+1+2/24+10/1440+10/86400TRUNC(ADD_MONTHS(SYSDATE,1),'MM')+1+2/24+10/1440+10/86400
每季首日 02:10:10TRUNC(SYSDATE,'Q')+1+2/24+10/1440+10/86400TRUNC(ADD_MONTHS(SYSDATE,3),'Q')+1+2/24+10/1440+10/86400
每週一 02:10:10NEXT_DAY(TRUNC(SYSDATE),'MONDAY')+2/24+10/1440+10/86400NEXT_DAY(TRUNC(SYSDATE+7),'MONDAY')+2/24+10/1440+10/86400

5. 關鍵初始化參數

JOB_QUEUE_PROCESSES(預設 4,最大 36)控制同時執行 Job 進程數,若為 0 則所有 Job 不會執行,務必設定 ≥1。

掌握上述模板,即可快速部署資料歸檔、統計收集、報表產生等週期性維護作業。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved