首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle DBMS_JOB 定時任務配置指南:每 20 分鐘執行存儲過程、參數詳解與常用管理操作

     編輯:Oracle 資料庫相關知識

前置條件

-- init.ora / spfile 設置
JOB_QUEUE_PROCESSES = 4      -- 啟動 4 個 JOB 隊列進程 (J000-J003)
JOB_QUEUE_INTERVAL = 60      -- 每 60 秒輪詢一次 (10g+ 已廢棄,由 JOB_QUEUE_PROCESSES 控制)
JOB_QUEUE_KEEP_CONNECTIONS = TRUE  -- 保持會話連接減少重連開銷

修改後需 STARTUP FORCE 重啟實例生效 (動態參數可 ALTER SYSTEM SET)。

提交作業示例

VARIABLE JOBNO NUMBER;
BEGIN
  DBMS_JOB.SUBMIT(
    JOB       => :JOBNO,
    WHAT      => 'P_TEST;',                 -- 調用存儲過程
    NEXT_DATE => SYSDATE,                   -- 首次執行時間
    INTERVAL  => 'SYSDATE + 1/72'           -- 每 20 分鐘 (1天=1, 1/24=1小時, 1/72=20分)
  );
  COMMIT;  -- 必須提交,否則作業不生效
END;
/
PRINT JOBNO;

間隔時間公式速查

需求INTERVAL 表達式
每 5 分鐘SYSDATE + 1/288
每 10 分鐘SYSDATE + 1/144
每 30 分鐘SYSDATE + 1/48
每 1 小時SYSDATE + 1/24
每天凌晨 2 點TRUNC(SYSDATE+1) + 2/24
每周一 3:00NEXT_DAY(TRUNC(SYSDATE),'MONDAY') + 3/24
每月 1 號 00:00TRUNC(ADD_MONTHS(SYSDATE,1),'MM')

常用管理 API

操作API示例
刪除作業DBMS_JOB.REMOVE(jobno)EXEC DBMS_JOB.REMOVE(123);
修改執行內容DBMS_JOB.WHAT(jobno, 'NEW_PROC;')EXEC DBMS_JOB.WHAT(123, 'P_TEST2;');
修改下次執行時間DBMS_JOB.NEXT_DATE(jobno, next_date)EXEC DBMS_JOB.NEXT_DATE(123, SYSDATE+1);
修改間隔DBMS_JOB.INTERVAL(jobno, 'SYSDATE+1/24')EXEC DBMS_JOB.INTERVAL(123, 'SYSDATE+1/48');
標記失效/啟用DBMS_JOB.BROKEN(jobno, TRUE/FALSE [, next_date])EXEC DBMS_JOB.BROKEN(123, TRUE);
立即手動運行DBMS_JOB.RUN(jobno)EXEC DBMS_JOB.RUN(123);
查看作業詳情SELECT * FROM USER_JOBS WHERE JOB = 123;-- 查看 NEXT_DATE、INTERVAL、FAILURES、BROKEN 等

完整示例:每 20 分鐘跑 P_TEST

VAR JOBNO NUMBER;
BEGIN
  DBMS_JOB.SUBMIT(:JOBNO, 'P_TEST;', SYSDATE, 'SYSDATE + 1/72');
  COMMIT;
END;
/
-- 驗證
SELECT JOB, WHAT, NEXT_DATE, INTERVAL, BROKEN FROM USER_JOBS WHERE JOB = :JOBNO;

遷移建議

Oracle 10g+ 推薦使用 DBMS_SCHEDULER (功能更強、支援日曆語法、事件驅動、遠程作業),DBMS_JOB 僅為相容保留。

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