一烁竭、
1.創(chuàng)建一張測(cè)試表
-- Create table
create table A8
(
a1 VARCHAR2(500)
)
tablespace DSP_DATA
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
2.創(chuàng)建存儲(chǔ)過(guò)程 實(shí)現(xiàn)向測(cè)試表插入數(shù)據(jù)
create or replace procedure proc_add_test as
begin
insert into a8 values (to_char(sysdate, 'yyyy-mm-dd hh:mi'));/*向測(cè)試表插入數(shù)據(jù)*/
commit;
end;
3.創(chuàng)建job定時(shí)任務(wù) 實(shí)現(xiàn)自動(dòng)調(diào)用存儲(chǔ)過(guò)程(當(dāng)前時(shí)間 17:03)
declare
job number;
BEGIN
DBMS_JOB.SUBMIT(
JOB => job, /*自動(dòng)生成JOB_ID*/
WHAT => 'proc_add_test;', /*需要執(zhí)行的存儲(chǔ)過(guò)程名稱或SQL語(yǔ)句*/
NEXT_DATE => sysdate+3/(24*60), /*初次執(zhí)行時(shí)間-下一個(gè)3分鐘*/
INTERVAL => 'trunc(sysdate,''mi'')+1/(24*60)' /*每隔1分鐘執(zhí)行一次*/
);
commit;
end;
二、
1.可以通過(guò)查詢系統(tǒng)表查看該job信息
select * from user_jobs焚辅;
2.手動(dòng)sql調(diào)用job (直接調(diào)用job可以忽略開(kāi)始時(shí)間)
begin
DBMS_JOB.RUN(40); /*40 job的id*/
end;
3.刪除任務(wù)
begin
/*刪除自動(dòng)執(zhí)行的job*/
dbms_job.remove(40);
end;
4.停止job
dbms.broken(job己儒,broken淑玫,nextdate);
dbms_job.broken(v_job,true,next_date); /*停止一個(gè)job,里面參數(shù)true也可是false巾腕,next_date(某一時(shí)刻停止)也可是sysdate(立刻停止)。 */
5.修改間隔時(shí)間
dbms_job.interval(job絮蒿,interval);
6.修改下次執(zhí)行時(shí)間
dbms_job.next_date(job尊搬,next_date);
7.修改要執(zhí)行的操作
dbms_job.what(jobno,'sp_fact_charge_code;')土涝; --修改某個(gè)job名
三 其他知識(shí)
1.存job信息的表user_jobs主要字段說(shuō)明
列名 數(shù)據(jù)類型 解釋
JOB NUMBER 任務(wù)的唯一標(biāo)示號(hào)
LOG_USER VARCHAR2(30) 提交任務(wù)的用戶
PRIV_USER VARCHAR2(30) 賦予任務(wù)權(quán)限的用戶
SCHEMA_USER VARCHAR2(30) 對(duì)任務(wù)作語(yǔ)法分析的用戶模式
LAST_DATE DATE 最后一次成功運(yùn)行任務(wù)的時(shí)間
LAST_SEC VARCHAR2(8) 如HH24:MM:SS格式的last_date日期的小時(shí)佛寿,分鐘和秒
THIS_DATE DATE 正在運(yùn)行任務(wù)的開(kāi)始時(shí)間,如果沒(méi)有運(yùn)行任務(wù)則為null
THIS_SEC VARCHAR2(8) 如HH24:MM:SS格式的this_date日期的小時(shí),分鐘和秒
NEXT_DATE DATE 下一次定時(shí)運(yùn)行任務(wù)的時(shí)間
NEXT_SEC VARCHAR2(8) 如HH24:MM:SS格式的next_date日期的小時(shí)冀泻,分鐘和秒
TOTAL_TIME NUMBER 該任務(wù)運(yùn)行所需要的總時(shí)間常侣,單位為秒
BROKEN VARCHAR2(1) 標(biāo)志參數(shù),Y標(biāo)示任務(wù)中斷弹渔,以后不會(huì)運(yùn)行
INTERVAL VARCHAR2(200) 用于計(jì)算下一運(yùn)行時(shí)間的表達(dá)式
FAILURES NUMBER 任務(wù)運(yùn)行連續(xù)沒(méi)有成功的次數(shù)
WHAT VARCHAR2(2000) 執(zhí)行任務(wù)的PL/SQL塊
2.INTERVAL參數(shù)常用值示例
每天午夜12點(diǎn) ''TRUNC(SYSDATE + 1)''
每天早上8點(diǎn)30分 ''TRUNC(SYSDATE + 1) + (860+30)/(2460)''
每星期二中午12點(diǎn) ''NEXT_DAY(TRUNC(SYSDATE ), ''''TUESDAY'''' ) + 12/24''
每個(gè)月第一天的午夜12點(diǎn) ''TRUNC(LAST_DAY(SYSDATE ) + 1)''
每個(gè)季度最后一天的晚上11點(diǎn) ''TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), ''Q'' ) -1/24''
每星期六和日早上6點(diǎn)10分 ''TRUNC(LEAST(NEXT_DAY(SYSDATE, ''''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)''
每3秒鐘執(zhí)行一次 'sysdate+3/(246060)'
每2分鐘執(zhí)行一次 'sysdate+2/(24*60)'
1:每分鐘執(zhí)行
Interval => TRUNC(sysdate,'mi') + 1/ (2460) --每分鐘執(zhí)行
interval => 'sysdate+1/(2460)' --每分鐘執(zhí)行
interval => 'sysdate+1' --每天
interval => 'sysdate+1/24' --每小時(shí)
interval => 'sysdate+2/2460' --每2分鐘
interval => 'sysdate+30/246060' --每30秒
2:每天定時(shí)執(zhí)行
Interval => TRUNC(sysdate+1) --每天凌晨0點(diǎn)執(zhí)行
Interval => TRUNC(sysdate+1)+1/24 --每天凌晨1點(diǎn)執(zhí)行
Interval => TRUNC(SYSDATE+1)+(860+30)/(24*60) --每天早上8點(diǎn)30分執(zhí)行
3:每周定時(shí)執(zhí)行
Interval => TRUNC(next_day(sysdate,'星期一'))+1/24 --每周一凌晨1點(diǎn)執(zhí)行
Interval => TRUNC(next_day(sysdate,1))+2/24 --每周一凌晨2點(diǎn)執(zhí)行
4:每月定時(shí)執(zhí)行
Interval =>TTRUNC(LAST_DAY(SYSDATE)+1) --每月1日凌晨0點(diǎn)執(zhí)行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24 --每月1日凌晨1點(diǎn)執(zhí)行
5:每季度定時(shí)執(zhí)行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'q') --每季度的第一天凌晨0點(diǎn)執(zhí)行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'q') + 1/24 --每季度的第一天凌晨1點(diǎn)執(zhí)行
Interval => TRUNC(ADD_MONTHS(SYSDATE+ 2/24,3),'q')-1/24 --每季度的最后一天的晚上11點(diǎn)執(zhí)行
6:每半年定時(shí)執(zhí)行
Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24 --每年7月1日和1月1日凌晨1點(diǎn)
7:每年定時(shí)執(zhí)行
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24 --每年1月1日凌晨1點(diǎn)執(zhí)行