Oracle 作業
dbms_job
與dbms_scheduler
用于安排和管理作業隊列,通過使用作業,可以使ORACLE數據庫定期執行特定的任務。
一. dbms_job
1.1. 創建
variable jobno number;
begin
dbms_job.submit(:jobno,'proce_t;', sysdate, 'sysdate+1/24/60');
commit;
end;
/
1.2. 參數
Job
輸出變量,是此任務在任務隊列中的編號。
what
執行的任務的名稱及其輸入參數。
next_date
何時運行這個工作。寫Job的時候可以不指定該值。
interval
任務執行的時間間隔。
每天運行一次
'SYSDATE + 1'每小時運行一次
'SYSDATE + 1/24'每10分鐘運行一次
'SYSDATE + 10/(6024)每30秒運行一次
'SYSDATE + 30/(6024*60)'每隔一星期運行一次
'SYSDATE + 7'
1.3. 管理
查看用戶job
select * from user_jobs;
刪除job
exec dbms_job.remove(jobno);
修改下次執行時間
exec dbms_job.next_date(jobno, next_date);
修改間隔時間
exec dbms_job.interval(jobno, interval);
啟動job
exec dbms_job.run(jobno);
停止job
exec dbms.broken(jobno, true, nextdate);
查看進程數
show parameter job_queue_processes;
必須大于0,否則執行下面的命令修改:
alter system set job_queue_processes=10;
二. dbms_scheduler
在Oracle 10g之前,我們通過
DBMS_JOB
來管理定時任務;而10g之后,則推薦使用DBMS_SCHEDULER
來管理定時任務,因為它提供了更強大的功能和靈活的機制。
2.1. 創建
begin
dbms_scheduler.create_job (
job_name => 'test',
job_type => 'STORED_PROCEDURE',
job_action => 'proce_t',
start_date => sysdate,
repeat_interval => 'FREQ=MINUTELY;INTERVAL=1',
enabled => true
);
end;
/
2.2. 參數
job_name
: 必選, 任務名稱job_type
: 必選, 任務類型
- PLSQL_BLOCK, -- 執行一個PL/SQL匿名快
- STORED_PROCEDURE, -- 執行一個存儲過程
- EXECUTABLE, -- 執行一個外部程序
- CHAIN -- 執行一個CHAIN
job_action
: 必選, 任務內容, 與job_type配合使用start_date
: 可選, 首次執行時間, 為空時表示立即執行repeat_interval
: 可選, 執行頻率, 為空時表示只執行一次
- FREQ=MINUTELY; -- 表示間隔單位, 可選值有YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, SECONDLY
- INTERVAL=1 -- 表示間隔周期
enabled
: 可選, 是否啟用任務
2.3. 管理
查看用戶scheduler_job
select * from user_scheduler_jobs;
刪除scheduler_job
exec dbms_scheduler.drop_job(job_name => 'CLEANQUEUE');
查看JOB運行日志
select log_id, log_date, status from user_scheduler_job_run_details where job_name='TEST_JOB1';
調度作業
exec dbms_scheduler.run_job('test');
停止作業
exec dbms_scheduler.stop_job('test');