oracle創建計划任務


特別提示:
oracle是執行完任務,才按照interval去計算下次執行時間!!!

為精確每個5分鍾執行一個任務,必須自己計算時間。
如:trunc_minute(sysdate)+5/1440

create or replace function trunc_minute(v_date date) return date as

begin
      return to_number(trunc(to_char(v_date, 'mi')/5))*5/(24*60) + trunc(v_date, 'hh24');
end;

 

 

創建存儲過程

備注:默認在存儲過程中是不允許執行truncate table tablename,所以要加

execute   immediate 
create or replace procedure truncate_table as
begin
       execute   immediate 'truncate table test_STATUS';
end;

每天3點執行

在pl/sql

declare  
  jobno number;
begin
dbms_job.submit(job =>jobno,
                    what =>'truncate__table;',
                    next_date =>sysdate,
                    interval =>'trunc(sysdate + 1) + 3/24');
end;

 

sql plus

variable jobno number;
begin
sys.dbms_job.submit(job => :jobno,
what => 'change_date;',
next_date => to_date('18-11-2013', 'dd-mm-yyyy'),
interval => 'sysdate+1/1440');--每天1440分鍾,即一分鍾運行change_date過程一次
commit; --必須有commit,如果沒有是查不到該job的!!!
end;

variable相當於一個sql*plus環境的全局變量,declare里定義的是pl/sql中的局部變量。

 

查看job

select * from user_jobs;--查看當前用戶的調度任務
select * from dba_jobs_running;--查看正在執行的調度任務
select * from dba_jobs;--查看執行完的調度任務
select * from all_jobs; -- 查看數據庫系統所有任務

 

常用時間設置

1)如果想每天凌晨1 點執行,則此參數可設置為
'trunc(sysdate)+25/24';
(2)如果想每周一凌晨1 點執行,則此參數可設置為
'trunc(next_day(sysdate,1))+25/24';
(3)如果想每月1 號凌晨1 點執行,則此參數可設置為
'trunc(last_day(sysdate))+25/24';
(4)如果想每季度執行一次,則此參數可設置為
'trunc(add_months(sysdate,3),'Q')+1/24';
(5)如果想每半年執行一次,則此參數可設置為'add_months(trunc(sysdate,'yyyy'),6)+1/24';
(6)如果想每年執行一次,則此參數可設置為'add_months(trunc(sysdate,'yyyy'),12)+1/24'。

每天運行一次
'SYSDATE + 1'
每小時運行一次
'SYSDATE + 1/24'
每10分鍾運行一次
'SYSDATE + 10/(60*24)'
每30秒運行一次
'SYSDATE + 30/(60*24*60)'
每隔一星期運行一次
'SYSDATE + 7'
每分鍾
dbms_job.submit(:v_job_no, 'insert into job_test values(sysdate);', sysdate,
'sysdate+1/1440');

 

 

 

備注:

oracle定時執行job queue 的后台進程是SNP,要啟動

snp,首先看系統模式是否支持

sql> alter system enable restricted session;

sql> alter system disenable restricted session;

利用上面的命令更改系統的會話方式為disenable restricted,為snp的啟動創建條件.


再有就是配置job queue的啟動參數,snp的啟動參數位於oracle的初始化文件中,
job_queue_processes=10   (oracle10gde 默認值)
job_queue_interval=N

第一行定義snp進程的啟動個數為10,正常范圍是0-36,根據任務的多少,可以配置
不同的數值.

第二行定義系統每隔幾秒喚醒該進程一次.缺省是60,正常范圍是1-3600秒.事實上,該進程執行完

當前任務后,就進入睡眠狀態,睡眠一段時間后,由系統的總控負責將其喚醒。  
如果該文件中沒有上面兩行,請按照如上配置添加。配置完成后,需要重新啟動數據庫,使其生效

。注意:如果任務要求執行的間隔很短的話,N的配置也要相應地小一點。


查看job queue的詳細信息,查詢數據庫字典 user_jobs

eg:
 sql> select job,next_date,next_sec,broken from user_jobs;


免責聲明!

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



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