每天1點執行的oracle JOB樣例

2021-06-18 00:19:21 字數 4185 閱讀 5220

declare

x number;

begin

sys.dbms_job.submit

( job => x

,what => 'syn_rpt_members_relation;'

,next_date => to_date('02-07-2008 01:00:00','dd/mm/yyyy hh24:mi:ss')

,interval => 'trunc(sysdate)+1+1/24'

,no_parse => false

);sys.dbms_output.put_line('job number is: ' || to_char(x));

commit;

end; /

以上是明確指定每天的1點執行此job,如果指定是每天中午12點執行interval需要指定為'trunc(sysdate)+1+12/24',如果僅僅指定interval為一天,這樣當你手工用dbms_job.run(job)去執行一次時,job每天的執行時間是會改變的,如果你想job每天在固定時間執行,可以參考上面的例子.

初始化相關引數job_queue_processes

alter system set job_queue_processes=39 scope=spfile;//最大值不能超過1000 ;job_queue_interval = 10 //排程作業重新整理頻率秒為單位

job_queue_process 表示oracle

能夠併發的job的數量,可以通過語句  

show parameter job_queue_process;

來檢視oracle中job_queue_process的值。當job_queue_process值為0時表示全部停止oracle的job,可以通過語句

alter system set job_queue_processes = 10;

來調整啟動oracle的job。

提交job語法:

begin

sys.dbms_job.submit(job => :job,

what => 'p_clear_packbal;',

next_date => to_date('04-08-2008 05:44:09', 'dd-mm-yyyy hh24:mi:ss'),

interval => 'sysdate+ 1/360');

commit;

end;

/-------------------------

建立job

variable jobno number;

begin

dbms_job.submit(:jobno, 'p_cred_plan;',sysdate,'sysdate+1/2880',true);

commit;

執行job

sql> begin

dbms_job.run(:job1);

end;

/刪除job

sql> begin

dbms_job.remove(:job1);

end;

/dba_jobs

===========================================

字段(列) 型別 描述

job number 任務的唯一標示號

log_user varchar2(30) 提交任務的使用者

priv_user varchar2(30) 賦予任務許可權的使用者

schema_user varchar2(30) 對任務作語法分析的使用者模式

last_date date 最後一次成功執行任務的時間

last_sec varchar2(8) 如hh24:mm:ss格式的last_date日期的小時,分鐘和秒

this_date date 正在執行任務的開始時間,如果沒有執行任務則為null

this_sec varchar2(8) 如hh24:mm:ss格式的this_date日期的小時,分鐘和秒

next_date date 下一次定時執行任務的時間

next_sec varchar2(8) 如hh24:mm:ss格式的next_date日期的小時,分鐘和秒

total_time number 該任務執行所需要的總時間,單位為秒

broken varchar2(1) 標誌引數,y標示任務中斷,以後不會執行

interval varchar2(200) 用於計算下一執行時間的表示式

failures number 任務執行連續沒有成功的次數

what varchar2(2000) 執行任務的pl/sql塊

current_session_label raw mlslabel 該任務的信任oracle會話符

clearance_hi raw mlslabel 該任務可信任的oracle最大間隙

clearance_lo raw mlslabel 該任務可信任的oracle最小間隙

nls_env varchar2(2000) 任務執行的nls會話設定

misc_env raw(32) 任務執行的其他一些會話引數

--------------------------

描述 interval引數值

每天午夜12點 'trunc(sysdate + 1)'

每天早上8點30分 'trunc(sysdate + 1) + (8*60+30)/(24*60)'

每星期二中午12點 'next_day(trunc(sysdate ), ''tuesday'' ) + 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, ''saturday"), next_day(sysdate, "sunday"))) + (6×60+10)/(24×60)'

1:每分鐘執行

interval => trunc(sysdate,'mi') + 1/ (24*60)

或 interval => sysdate+1/1440

2:每天定時執行

例如:每天的凌晨1點執行

interval => trunc(sysdate) + 1 +1/ (24)

3:每週定時執行

例如:每週一凌晨1點執行

interval => trunc(next_day(sysdate,'星期一'))+1/24

4:每月定時執行

例如:每月1日凌晨1點執行

interval =>trunc(last_day(sysdate))+1+1/24

5:每季度定時執行

例如每季度的第一天凌晨1點執行

interval => trunc(add_months(sysdate,3),'q') + 1/24

6:每半年定時執行

例如:每年7月1日和1月1日凌晨1點

interval => add_months(trunc(sysdate,'yyyy'),6)+1/24

7:每年定時執行

例如:每年1月1日凌晨1點執行

interval =>add_months(trunc(sysdate,'yyyy'),12)+1/24

********************

begin

sys.dbms_job.submit(job => :job,

what => 'check_err;',

next_date => trunc(sysdate)+23/24,

interval => 'trunc(next_day(sysdate,''星期五''))+23/24');

commit;

end;

其中:job是系統自動產生編號,check_err是我的乙個過程,next_date設定下次執行時間,這裡是今天晚上23:00,interval設定時間間隔,多久執行一次,這裡是每週的星期五晚上23:00,函式next_day返回日期中包含指定字元的日期,trunc 函式去掉日期裡的時間,也就是得到的是某天的00:00,時間是以天為單位的所以要得到某某點某某分,就需要分數:

1/24    一小時;

1/1440    一分;

1/3600   一秒;

C 每天定時執行任務(每天凌晨1點執行)

專案中有個需求,需要在每天凌晨1點執行幾個功能,怎麼些呢?平時經常用的那些timer,更多的是應用於間隔特定時長執行,而非在具體某個時間點執行。網上有多種方法,選擇了其中乙個比較簡單的 如下 region 定時器 設定定時執行 settaskatfixedtime 在form load 中呼叫 pr...

winform 每天定時執行(多個時間點)

首先,在需要執行的函式中新增 定時器 system.timers.timer timer new system.timers.timer timer.enabled true timer.interval 1000 執行間隔時間,單位為毫秒 timer.start 指定每天時間1執行 timer.e...

day1 每天進步一點

一 linux 系統執行級別一般為 0 6,請分別寫出每個級別的含義?二 linux 系統中檢視中文亂碼,請問如何解決亂碼問題?三 linux系統優化 效能優化 安全優化?四 你用過的伺服器型號有哪些?五 程式 程序和守護程序的區別?六 提公升使用者體驗的 解決方案?七 buffer與cache區別...