oracle的job定時器

2021-08-31 10:18:33 字數 2778 閱讀 7385

對於dba來說,資料庫job再熟悉不過了,因為經常要資料庫定時的自動執行一些指令碼,或做資料庫備份,或做資料的提煉,或做資料庫的效能優化,包括重建索引等等的工作。但是,oracle定時器job時間的處理上,千變萬化,今天我把比較常用寫法彙總如下:

oracle定時任務有sys.dbms_job包完成

新增之前檢查job_queue_processes系統引數,show parameter job_queue_processes如果等於0,則alter system set job_queue_processes =5;設定5個任務

新增任務:sys.dbms_job.submit(job,what,next_date,interval,no_parse);

引數分析:

job: 這個是submit()過程放回的job標識

what:被執行pl/sql**塊

next_date:指識何時這個工作將被重新執行

no_parse:指示此工作在提交後或執行時是否應進行語法分析,true指示pl/sql**第一次執行時應進行語法分析,false 指示本pl/sql**應立即進行語法分析

刪除任務:sys.dbms_job.remove(job)

通過select job,what,next_date,interval,no_parse from user_jobs;

sql**

begin    

sys.dbms_job.remove(job);    

commit;    

end;    

/    

介紹幾個資料字典檢視:

dba_jobs          本資料庫定義到任務佇列的任務

dba_jobs_running  目前正在執行的任務

user_jobs         當前使用者擁有的任務

時間間隔 引數interval 設定

每天執行一次        'sysdate+1'

每小時執行一次      'sysdate+1/24'

每10分鐘執行一次    'sysdate+10/(24*60)'

每30秒執行一次      'sysdate+30/(24*60*60)'

每星期一次          'sysdate+7'

不再執行該任務並刪除它 null

以上時間間隔不能保證任務的下一次執行在乙個特定的時間,僅僅能夠指定乙個任務兩次執行之間的時間間隔

特定日期或時間的例子

每天午夜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)'

在總結之前,先把job的引數一一說明一下:

job引數是由submit()過程返回的binary_ineger。這個值用來唯一標識乙個工作;

what引數是將被執行的pl/sql**塊;

next_date引數指識何時將執行這個工作。寫job的時候可以不指定該值,預設值是:「4000-1-1」;

interval引數何時這個工作將被重執行。

其中interval這個值是決定job何時,被重新執行的關鍵。

例如:有儲存過程 p_dosomethings,需要被不同的時間間隔執行。

sql**

declare         

jobno number;         

begin         

dbms_job.submit(      

jobno,      

'p_dosomething;',  --what      

to_date('20090101020000','yyyy-mm-dd hh24:mi:ss'),--next_date,可以不填      

'interval時間字串'--interval,關鍵設定      

);         

commit;         

end;   

1、 每分鐘執行

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

2、 每天定時執行

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

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

3、 每週定時執行

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

interval => trunc(next_day(sysdate,2))+2/24 --星期一,一周的第二天

4、 每月定時執行

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

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

5、 每季度定時執行

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

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

6、 每半年定時執行

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

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

7、 每年定時執行

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

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

Oracle定時器(Job)彙總

對於 dba來說,資料庫 job再熟悉不過了,因為經常要資料庫定時的自動執行一些指令碼,或做資料庫備份,或做資料的提煉,或做資料庫的效能優化,包括重建索引等等的工作。但是,oracle 定時器job 時間的處理上,千變萬化,今天我把比較常用寫法彙總如下 job的引數一一說明一下 引數是由 submi...

oracle定時器job用法小結

顧名思義,定時器就是定時來完成某些操作,oracle中的定時器job也是這種用法,在oracle中可以通過定義job來定期執行某個程式。oracle提供內建包dbms job來執行job的相關操作,比如定義 提交 更改 停止 移除等。1 建立job 使用submit 過程,這個過程中有5個引數 jo...

自動執行oracle儲存過程 job定時器

1.建立乙個表,為了能清楚看到定時器的運 況我們建立乙個帶有日期欄位的表 create table job table run time date 2.建立儲存過程 create or replace procedure job proc is begin insert into job table...