ALTER SYSTEM SET job_queue_processes = n; -- n > 0,最大 1000 -- 查看背景程序狀態 SELECT name, description FROM v$bgprocess;
| 子程序 | 功能 |
|---|---|
| SUBMIT | 提交新作業 |
| REMOVE | 移除作業 |
| CHANGE | 修改作業定義 |
| INTERVAL | 設定執行間隔 |
| NEXT_DATE | 設定下次執行時間 |
| BROKEN | 標記作業失效/恢復 |
| RUN | 立即執行指定作業 |
| WHAT | 修改作業執行內容 |
| USER_EXPORT | 匯出作業定義 |
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 才生效
作業連續失敗 16 次後自動標記 BROKEN。恢復兩法:
-- 方法 A:立即手動執行 BEGIN DBMS_JOB.RUN(:jobno); END; / -- 方法 B:重置 BROKEN 標記 BEGIN DBMS_JOB.BROKEN(:jobno, FALSE); END; / -- 建議先 RUN 觀察錯誤,修正後再 BROKEN(FALSE)
BEGIN DBMS_JOB.INTERVAL(job => 123, interval => 'SYSDATE + 1'); -- 每天 COMMIT; END; / -- interval 運算式會在每次執行完成後計算下次時間
BEGIN DBMS_JOB.REMOVE(123); COMMIT; END; / -- 移除後不可恢復,謹慎操作
USER_JOBS / DBA_JOBS:作業定義、狀態、上次/下次執行時間JOB_QUEUE_PROCESSES 參數動態調整,無需重啟Oracle 10g+ 推薦改用 DBMS_SCHEDULER,功能更強大(支援日曆、事件驅動、鏈式作業、資源管理)。新專案優先採用 Scheduler,舊系統可逐步遷移。