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

Oracle DBMS_JOB 排程作業完整操作指南:從參數設定到故障排除

     編輯:Oracle 資料庫相關知識

一、啟用 Job Queue 背景程序

ALTER SYSTEM SET job_queue_processes = n;  -- n > 0,最大 1000
-- 查看背景程序狀態
SELECT name, description FROM v$bgprocess;

二、DBMS_JOB 套件核心子程序

子程序功能
SUBMIT提交新作業
REMOVE移除作業
CHANGE修改作業定義
INTERVAL設定執行間隔
NEXT_DATE設定下次執行時間
BROKEN標記作業失效/恢復
RUN立即執行指定作業
WHAT修改作業執行內容
USER_EXPORT匯出作業定義

三、關鍵操作範例

1. 提交作業

DECLARE
  v_jobno NUMBER;
BEGIN
  DBMS_JOB.SUBMIT(
    job       => v_jobno,
    what      => 'my_package.my_procedure;',
    next_date => SYSDATE,
    interval  => 'SYSDATE + 1/24'  -- 每小時
  );
  COMMIT;
  DBMS_OUTPUT.PUT_LINE('Job Number: ' || v_jobno);
END;
/
-- 注意:必須 COMMIT 才生效

2. 處理 BROKEN 作業

作業連續失敗 16 次後自動標記 BROKEN。恢復兩法:

-- 方法 A:立即手動執行
BEGIN DBMS_JOB.RUN(:jobno); END;
/
-- 方法 B:重置 BROKEN 標記
BEGIN DBMS_JOB.BROKEN(:jobno, FALSE); END;
/
-- 建議先 RUN 觀察錯誤,修正後再 BROKEN(FALSE)

3. 修改執行間隔

BEGIN
  DBMS_JOB.INTERVAL(job => 123, interval => 'SYSDATE + 1'); -- 每天
  COMMIT;
END;
/
-- interval 運算式會在每次執行完成後計算下次時間

4. 移除作業

BEGIN DBMS_JOB.REMOVE(123); COMMIT; END;
/
-- 移除後不可恢復,謹慎操作

四、監控與維護視圖

  • USER_JOBS / DBA_JOBS:作業定義、狀態、上次/下次執行時間
  • JOB_QUEUE_PROCESSES 參數動態調整,無需重啟

五、遷移建議

Oracle 10g+ 推薦改用 DBMS_SCHEDULER,功能更強大(支援日曆、事件驅動、鏈式作業、資源管理)。新專案優先採用 Scheduler,舊系統可逐步遷移。

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