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

Oracle DBMS_JOB 定時任務完整手冊:創建、查看、修改、刪除、間隔設置技巧

     編輯:Oracle 資料庫基礎

創建 JOB

VARIABLE jobno NUMBER;
BEGIN
  DBMS_JOB.SUBMIT(
    :jobno,                    -- 返回 job 編號
    'your_procedure;',         -- 執行的存儲過程或 SQL,分號不可省
    SYSDATE,                   -- 首次執行時間
    'SYSDATE + 1/24/60'        -- 間隔(天為單位),此處為每分鐘
  );
  COMMIT;
END;
/

實戰示例

-- 建測試表
CREATE TABLE t_time (job_time DATE NOT NULL);

-- 每分鐘插入一條記錄
VARIABLE jobno NUMBER;
BEGIN
  DBMS_JOB.SUBMIT(:jobno, 'INSERT INTO t_time VALUES (SYSDATE);', SYSDATE, 'SYSDATE + 1/24/60');
  COMMIT;
END;
/

-- 每天刪除前一天數據
BEGIN
  DBMS_JOB.SUBMIT(:jobno, 'DELETE FROM t_time WHERE job_time < SYSDATE - 1;', SYSDATE, 'SYSDATE + 1');
  COMMIT;
END;
/

查看所有 JOB

SELECT job, what, failures, broken FROM user_jobs;

控制 JOB

-- 停用
BEGIN DBMS_JOB.BROKEN(jobno, TRUE); END;
-- 啟用(立即執行一次)
BEGIN DBMS_JOB.RUN(jobno); END;
-- 刪除
BEGIN DBMS_JOB.REMOVE(jobno); END;

修改 JOB

-- 修改執行內容
BEGIN DBMS_JOB.WHAT(jobno, 'new_procedure;'); END;

-- 修改間隔
BEGIN DBMS_JOB.INTERVAL(jobno, 'SYSDATE + 1'); END;

-- 修改下次執行時間
BEGIN DBMS_JOB.NEXT_DATE(jobno, SYSDATE + 1); END;

INTERVAL 經典寫法速查

需求INTERVAL 表達式
每分鐘TRUNC(SYSDATE,'MI') + 1/(24*60)
每天凌晨 1 點TRUNC(SYSDATE) + 1 + 1/24
每周一凌晨 1 點TRUNC(NEXT_DAY(SYSDATE,'星期一')) + 1/24
每月 1 號凌晨 1 點TRUNC(LAST_DAY(SYSDATE)) + 1 + 1/24
每季度首日 1 點TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
每半年 1/7 月 1 號 1 點ADD_MONTHS(TRUNC(SYSDATE,'YYYY'),6) + 1/24
每年 1 月 1 日 1 點ADD_MONTHS(TRUNC(SYSDATE,'YYYY'),12) + 1/24

Toad 風格速查

  • 每天:TRUNC(SYSDATE+1)
  • 每周:TRUNC(SYSDATE+7)
  • 每月:TRUNC(SYSDATE+30)
  • 每天 6 點:TRUNC(SYSDATE+1) + 6/24
  • 半小時:SYSDATE + 30/(24*60)
  • 每小時第 15 分:TRUNC(SYSDATE,'HH') + 75/(24*60)

注意

  • 10g+ 推薦使用 DBMS_SCHEDULER,功能更強(鏈、事件驅動、資源管理)。
  • JOB 失敗 16 次後自動標記 BROKEN,需人工干預。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved