Oracle設定定時任務JOB調度執行預存程序或PL/SQL代碼塊
目前Oracle資料庫設定定時任務job調度一般有兩種方式,分別是dbms_scheduler建立job調度和dbms_job建立job調度。dbms_scheduler建立job調度是在10g以後才有的,甲骨文公司為了用來替換dbms_job而提供了更強大的功能與更靈活的機制/管理。下面介紹這兩種方式。
1. dbms_scheduler建立job調度。
--查詢
select * from dba_scheduler_jobs;
--建立job
begin
dbms_scheduler.create_job (
job_name => 'job_myjob', --job名
job_type => 'STORED_PROCEDURE',--job類型
job_action => 'proc_myproc', --預存程序名
start_date => sysdate,--開始執行時間
repeat_interval => 'FREQ=DAILY;BYHOUR=9;BYMINUTE=30;BYSECOND=0', -- 下次執行時間,按天,每天09:30:00執行預存程序proc_myproc
comments => '測試JOB',--注釋
auto_drop=>false --job禁用後是否自動刪除
);
end;
--運行
begin
dbms_scheduler.run_job('job_myjob');
end;
--啟用
begin
dbms_scheduler.enable('job_myjob');
end;
--禁用
begin
dbms_scheduler.disable('job_myjob');
end;
--刪除
begin
dbms_scheduler.drop_job(job_name => 'job_myjob',force => TRUE);
end;
2.dbms_job建立job調度。
--查詢
select * from dba_jobs;
select * from all_jobs;
select * from user_jobs;
select * from dba_jobs_running;
-- 建立job
declare
job_id number;--聲明一個out變數
begin
-- 按天,每天09:30:00執行這個預存程序proc_myproc,並且輸出一個job_id變數,其值為該job的ID號
dbms_job.submit(
job_id, --參數是輸出參數,由submit()過程返回的binary_ineger,這個值用來唯一標識一個工作。一般定義一個變數接收,可以去user_jobs視圖查詢job值。
'proc_myproc;', --參數是將被執行的PL/SQL代碼塊,預存程序名稱等。
sysdate, --參數指識何時將運行這個工作。
'TRUNC(SYSDATE+1)+(9*60+30)/(24*60)' --參數何時這個工作將被重執行。
);
-- 把job的ID號列印出來
dbms_output.put_line(job_id);
end;
-- 運行job
begin
-- 這個7為job_id,請換為你自己對應的job號
dbms_job.run(7);
end;
-- 啟用job
begin
dbms_job.broken(7,false);
end;
-- 禁用job
begin
dbms_job.broken(7,true);
end;
-- 刪除一個job
begin
dbms_job.remove(7);
end;
總結:推薦大家使用dbms_scheduler來建立job調度。job調度可以定時執行PL/SQL代碼塊,預存程序等。