一、dmbs_job
dbms_job涉及到的知識點
1、創建job:
variable jobno number;
dbms_job.submit(:jobno, —-job號
'your_procedure;'
,—-執行的存儲過程,
';'
不能省略
next_date, —-下次執行時間
'interval'
—-每次間隔時間,interval以天為單位
);/
–系統會自動分配一個任務號jobno。
2、刪除job: dbms_job.remove(jobno);
3、修改要執行的操作: job:dbms_job.what(jobno, what);
4、修改下次執行時間:dbms_job.next_date(jobno, next_date);
5、修改間隔時間:dbms_job.interval(jobno, interval);
6、啟動job: dbms_job.run(jobno);
7、停止job: dbms.broken(jobno, broken, nextdate);
–broken為boolean值
例子:
– ①②步在sql窗口執行即可
– ①創建一張表
CREATE TABLE a(a DATE);
– ②創建一個自定義過程
CREATE OR REPLACE PROCEDURE TEST AS
BEGIN
INSERT INTO a VALUES(SYSDATE);
END;
– ③創建JOB 設定1分鍾執行一次該任務
VAR job1 NUMBER;
BEGIN
dbms_job.submit(:job1,’test;’,sysdate,’sysdate+1/1440’);
COMMIT;
END;
/
– ④運行JOB
BEGIN
dbms_job.run(:job1);
END;
/
--查詢當前的job任務。
select * from user_jobs;
二、jobs
使用dbms_scheduler需要具有create job權限,對定時任務一些操作需要具有MANAGE SCHEDULER權限,如:dbms_scheduler.stop_job('my_job_test',true);
BEGIN
dbms_scheduler.create_job(job_name => 'my_job_test',
job_type => 'STORED_PROCEDURE',
job_action => 'my_test',
start_date => sysdate,
repeat_interval => 'sysdate + 1/1440',
enabled => TRUE,
comments => 'test');
end;
參數介紹:
job_name:job名字
job_type:job類型,支持三種類型:
1)PLSQL_BLOCK——PL/SQL語句塊;
2)STORED_PROCEDURE——存儲過程;
3)EXECUTABLE——外部程序(外部程序可以是一個shell腳本,也可以是操作系統級別的指令)。
job_action:根據job_type的不同,job_action有相對應的內容。
number_of_arguments:參數個數。
start_date:執行開始時間。
repeat_interval:指定job執行頻率(如每分鍾執行一次、每天執行一次等)。
end_date:執行結束時間。
job_class:jobclass的名字。
enabled:指定是否自動激活job,為true代表自動激活,false代表不激活。
auto_drop:執行完是否自動drop
comments:對於job的簡單說明
定時器執行,調用存儲過程創建表成功了,不需要顯示的授權grant create table to user,只需要存錯過程定義為authid current_user即可。個人覺得dbms_job在調用authid current_user的存儲過程的時候,未能調用到用戶具有的角色的權限,這或許是dbms_job的一個bug。
簡單介紹下dbms_scheduler關於定時任務的一些常用過程:
1) dbms_scheduler.run(jobName) 運行job
2) dbms_scheduler.stop_job(jobName,force) 停止job,force默認為false,Oracle建議false停止失敗情況下,使用true,且使用true需要有manage scheduler權限
3) dbms_scheduler.drop_job(jobName) 刪除job
4) dbms_scheduler.enable(jobName) 打開job
5) dbms_scheduler.disable(jobName,force) 禁用job,force參數用於dependencies,如果TRUE,即使其他對象依賴於它,操作也能成功
相關視圖
1) user_scheduler_jobs 查看job信息
2) User_Scheduler_Job_Log job job日志
3) user_scheduler_job_run_details job運行日志
4) user_scheduler_running_jobs 正在運行的job
總結:
oracle定時任務,dbms_job調用存儲過程創建表,需要顯示授權,存儲過程定義為authid current_user也不行,而dbms_scheduler是不需要顯示授權的,這點來說后者更方便使用。另外,dbms_scheduler提供了job運行日志記錄視圖,可以查看具體的運行日志,比較實用。而且,oracle10g以后也推薦使用dbms_scheduler。