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

Oracle JOB 不執行排查全攻略與排程頻率設定速查表

     編輯:Oracle 資料庫基礎

核心參數

參數說明範圍對應進程
JOB_QUEUE_PROCESSES並發 JOB 執行進程數0~36 (0=停用)9i 前 SNPn,9i 後 CJQn
JOB_QUEUE_INTERVAL喚醒間隔 (秒)1~3600定期掃描待執行 JOB
-- 檢查實際運行進程
SELECT * FROM v$bgprocess WHERE paddr IS NOT NULL;  -- 空閒
SELECT * FROM v$bgprocess WHERE paddr IS NULL;      -- 忙碌

分級排查流程

  1. 參數確認:JOB_QUEUE_PROCESSES > 0、Interval 合理 (建議 60~300 秒)。
  2. JOB 狀態檢視:
    SELECT job, broken, last_date, next_date, what FROM dba_jobs;
    • BROKEN = 'Y' 或 NEXT_DATE = 4000-01-01 → 需修復:EXEC DBMS_JOB.BROKEN(job_id, FALSE);
    • LAST_DATE 正常但 NEXT_DATE 錯誤 → 檢查 INTERVAL 運算式。
  3. 運行中 JOB 檢查:
    SELECT * FROM dba_jobs_running;
    長時間 Running → 查 V$ACCESS、V$LOCKED_OBJECT 找阻塞源,殺死阻塞 Session 或 JOB 自身 Session 後重試。
  4. 重啟 JOB 進程 (疑似進程掛死):
    ALTER SYSTEM SET job_queue_processes = 0;
    -- 等待 5-10 秒
    ALTER SYSTEM SET job_queue_processes = 原值;
  5. 9i 已知 Bug:運行 497 天計數器溢位歸零導致停止排程,需重啟資料庫 (10g+ 已修復)。
  6. 手工測試:
    EXEC DBMS_JOB.RUN(job_id);
    觀察錯誤堆疊,排查程式邏輯/資料量/網路問題。

常用排程頻率運算式速查

需求INTERVAL 運算式
每天固定 08:10TRUNC(SYSDATE+1) + (8*60+10)/(24*60)
每天午夜TRUNC(SYSDATE+1)
每週TRUNC(SYSDATE+7)
每月TRUNC(SYSDATE+30) (近似)
每週日NEXT_DAY(TRUNC(SYSDATE), 'SUNDAY')
每天 06:00TRUNC(SYSDATE+1) + 6/24
每 30 分鐘SYSDATE + 30/1440
每小時第 15 分 (08:15, 09:15...)TRUNC(SYSDATE,'HH') + 75/1440 (注意:+15/1440 會落在上一小時)

最佳實踐建議

  • 生產庫 JOB_QUEUE_PROCESSES 設 5~10,視並發度調整。
  • 關鍵 JOB 設 BROKEN=FALSE 並監控 LAST_DATE。
  • 長時間 JOB 拆分為鏈式 JOB 或改用 DBMS_SCHEDULER (10g+ 功能更強)。
  • 定期清理 DBA_JOBS 中失效/測試 JOB。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved