oracle 定時運行存儲調度 schedule job,傳遞參數 及相關

原文地址:https://blog.csdn.net/hkyw000/article/details/50055069

1. 首先創建好相應的procedure。此處略過。假設procedure的名字是 P1,P1跑的時候需要傳遞參數。參數爲當前日期的前一天。

2.oracle 10g開始推出的 schedule更強大,更精確。以往的job還可繼續使用。先來看個例子:


begin  
dbms_scheduler.create_job(  
job_name => 'TEST',  
job_type => 'STORED_PROCEDURE',  
job_action => 'P1',  
number_of_arguments => 1,   
repeat_interval =>'FREQ=DAILY; BYHOUR=1',   
enabled => FALSE  
);   
end; 

begin  
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE (             
job_name => 'TEST',                       
argument_position => 1,                                                     
argument_value => to_char(sysdate-1,'yyyymmdd')
);     
end;
/

到此就創建好一個schedule.  具體可以在dba_scheduler_jobs 裏查看。

number_of_arguments 爲傳遞參數的數量

repeat_interval =>'FREQ=DAILY; BYHOUR=1',      這個就是每天跑,且在每天的1點開始跑。

具體interval 還有很多設置方法。每週,每月,每年,每週幾。。這些不多說。

Interval => TRUNC(sysdate) + 1 +1/ (24)  這也是每天的1點執行


然後就把enabled這個開關打開。開始生效schedule

EXEC DBMS_SCHEDULER.ENABLE('TEST');  
EXEC DBMS_SCHEDULER.RUN_JOB('TEST'); 

exec dbms_scheduler.drop_job('TEST'); 刪除job


修改相關參數命令:

EXEC dbms_scheduler.set_attribute('TEST1','REPEAT_INTERVAL','FREQ=DAILY;BYHOUR=2');

最後可以在 視圖中查看status,next_run_date 等相關參數


第二,於此同時,漸漸的發問,如果這個scheduler不是你創建的。你怎麼抽取出其相關的創建DDL 語句呢?

查了很多資料也沒有特別滿意的。(如果有大師看到我這文章,可以告訴我好的方法。)


1.對於job 可以用:

QL> select job from dba_jobs;

       JOB
----------
         1
                 
set serveroutput on ;

declare
        job_body varchar2(32767);
    begin
        dbms_job.user_export(1,job_body);
        dbms_output.put_line(job_body);
    end;
    /                 
        
        
dbms_job.isubmit(job=>1,what=>'begin insert into ttime values(systimestamp); end;',next_date=>to_date('2012-12-03:08:03:52','YYYY-MM-DD:HH24:MI:SS'),interval=>'sysdate+1/86400',no_parse=>TRUE);  


2.對於schedule,現在只找到一種方法,就是用expdp & impdp,然後impdp 寫上 show=y,sqlfile=xxx.sql
最後再cat這個sql文件。有人說到dbms_sched_job_export.create_exp導出,但是沒測試過。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章