資料庫內建 Job Queue(SNP 背景程序)可排程執行 PL/SQL 任務,效率高於 OS 層 Crontab,且避免用戶權限不一致問題。本文詳細說明命令列配置與操作步驟。
ALTER SYSTEM DISABLE RESTRICTED SESSION;(或啟用 restricted session 後再關閉)。init.ora ):job_queue_processes = n -- SNP 程序數,0-36,預設 0
job_queue_interval = N -- 喚醒間隔秒數,1-3600,預設 60GRANT EXECUTE ON dbms_job TO scott;
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.CHANGE | 修改作業屬性 |
| DBMS_JOB.WHAT | 修改執行內容 |
| DBMS_JOB.INTERVAL | 修改執行間隔 |
| DBMS_JOB.REMOVE | 刪除作業 |
| DBMS_JOB.BROKEN | 標記/解除損壞狀態 |
| DBMS_JOB.RUN | 立即執行 |