Oracle 定時任務增刪改查


創建

-- 創建定時任務
DECLARE 
	jobno NUMBER;
BEGIN
	dbms_job.submit (    
		jobno, -- 定時器ID,系統自動獲得
        'PRC_INSERT;', -- what執行的過程名,多個存儲過程以";"分隔,末尾要帶";"
        SYSDATE, -- next_date,定時器開始執行的時間,這樣寫表示立即執行
        'sysdate + 15/1440' -- interval,設置定時器執行的頻率,這樣寫每隔15分鍾執行一次
	);
	COMMIT;
END;

查看

-- 查詢定時任務(包括定時任務號)
select dj.job, dj.what, dj.last_date, dj.next_date
from dba_jobs dj 
where upper(dj.what) like '%P_SYN_PRODUCT%'
order by dj.NEXT_DATE asc;

-- 查看正在執行的調度任務
select * from dba_jobs_running;
-- 有權限訪問的定時任務
select job, what, last_date, next_date
from all_jobs
order by last_date desc;
-- 整個數據庫所有定時任務
select job, what, last_date, next_date
from dba_jobs
order by last_date desc;

-- 查詢執行任務的job 的臨界值是多少
select value from v$parameter where name like '%job_queue_processes%';
-- 修改job的臨界值
alter system set job_queue_processes =100;

刪除

-- 1、刪除定時任務的存儲過程 
BEGIN
  -- 210為job的id,此id不是隨便填寫的,而是執行select * from user_jobs;
  -- 查詢到定時任務名稱對應的id
  dbms_job.remove(210); 
  commit;
END;
-- 2、也可以使用以下刪除方式
-- 刪除一個定時器
call dbms_job.remove(83);

修改

-- 3、停止一個定時器
call DBMS_JOB.BROKEN(83, SYS.DIUTIL.INT_TO_BOOL(1));
-- 停止job: 
call DBMS_JOB.broken(job, broken, nextdate); –- broken為boolean值
-- 啟動一個定時器
call DBMS_JOB.run(83);

-- 修改字段 what 
call dbms_job.what(job, what);  
-- 修改字段 next_date
call dbms_job.next_date(job, next_date);
-- 修改字段 interval
call dbms_job.interval(job, interval); 

常見 interval 設置


每天午夜12點           TRUNC(SYSDATE + 1) 
每天早上8點30分         TRUNC(SYSDATE + 1) + (8*60+30)/(24*60) 
每星期二中午12點        NEXT_DAY(TRUNC(SYSDATE ), '星期二' ) + 12/24 
每個月第一天的午夜12點   TRUNC(LAST_DAY(SYSDATE ) + 1) 
每個季度最后一天的晚上11點 TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24 
每星期六和日早上6點10分 TRUNC(LEAST(NEXT_DAY(SYSDATE, '星期六'), NEXT_DAY(SYSDATE, "星期日"))) + (6×60+10)/(24×60)
 
每秒鍾執行次 sysdate + 1/(24 * 60 * 60)
如果改成sysdate + 10/(24 * 60 * 60)就是10秒鍾執行次
 
每分鍾執行 TRUNC(sysdate,'mi') + 1/ (24*60)
如果改成TRUNC(sysdate,'mi') + 10/ (24*60) 就是每10分鍾執行次
 
每天定時執行 
例如:每天的凌晨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
 
每半年定時執行 
例如:每年7月1日和1月1日凌晨1點 
ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24
 
每年定時執行 
例如:每年1月1日凌晨1點執行 
ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24

PLSQL操作

參考:
https://blog.csdn.net/www1056481167/article/details/84637674
https://www.cnblogs.com/leihongnu/p/15378805.html
https://www.cnblogs.com/yx007/p/6519544.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM