oracle創建定時任務


 一、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。


免責聲明!

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



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