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

Oracle DBMS_JOB 定時任務命令列完整實作指南

     編輯:Oracle 資料庫相關知識

前言

資料庫內建 Job Queue(SNP 背景程序)可排程執行 PL/SQL 任務,效率高於 OS 層 Crontab,且避免用戶權限不一致問題。本文詳細說明命令列配置與操作步驟。

一、啟用條件

  1. 關閉限制會話:ALTER SYSTEM DISABLE RESTRICTED SESSION;(或啟用 restricted session 後再關閉)。
  2. 初始化參數設定(init.ora):
    job_queue_processes = n -- SNP 程序數,0-36,預設 0
    job_queue_interval = N -- 喚醒間隔秒數,1-3600,預設 60

    修改後需重啟資料庫生效。

二、授權執行權限

GRANT EXECUTE ON dbms_job TO scott;

三、提交作業:DBMS_JOB.SUBMIT

VARIABLE jobno NUMBER;
BEGIN
  DBMS_JOB.SUBMIT(
    job     => :jobno,
    what    => 'my_job;',           -- 執行的預存程序
    next_date => SYSDATE,           -- 首次執行時間
    interval  => 'SYSDATE + 1/360'  -- 間隔:1/360 天 = 4 分鐘
  );
  COMMIT;
END;
/
PRINT jobno;

interval 語法:'SYSDATE + n' 表示每 n 天;NULL 表示執行一次後自動移除。

四、監控與管理

  • 查詢作業狀態:SELECT job, next_date, next_sec, failures, broken FROM user_jobs;
  • failures >= 16 會自動標記 broken = 'Y',停止執行。
  • 修復:DBMS_JOB.BROKEN(jobno, FALSE); 或強制執行 DBMS_JOB.RUN(jobno);。

五、其他常用套件程序

小結

DBMS_JOB 提供資料庫層級的可靠排程,配合適當的 job_queue_processes 與 interval 設定,可滿足備份、歸檔、批次處理等週期性任務需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
程序用途
DBMS_JOB.CHANGE修改作業屬性
DBMS_JOB.WHAT修改執行內容
DBMS_JOB.INTERVAL修改執行間隔
DBMS_JOB.REMOVE刪除作業
DBMS_JOB.BROKEN標記/解除損壞狀態
DBMS_JOB.RUN立即執行