一、什麼是Job
Job是一個在Oracle資料庫中被定義的單個工作或任務。在資料庫中,一個Job可以被指定為運行一次或者多次。
Job包含了執行內容和相關的調度信息,其可以用來在指定的時間及頻率內運行某項任務。
Job通常用來自動執行一些日常維護或後台任務,例如每日備份資料庫、生成報告等操作。
二、創建Job
在Oracle資料庫中,可以使用DBMS_SCHEDULER或DBMS_JOB package來創建Job。
1. 使用DBMS_SCHEDULER package
DBMS_SCHEDULER package提供了強大且靈活的調度功能,可以創建、調度和管理Job。
下面給出一個使用DBMS_SCHEDULER package創建Job的示例:
BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => 'daily_backup_job', -- Job名稱 job_type => 'PLSQL_BLOCK', -- Job類型 job_action => 'BEGIN my_backup_procedure; END;', -- Job要執行的操作 start_date => SYSTIMESTAMP, -- Job開始時間 repeat_interval => 'FREQ=DAILY;BYHOUR=2', -- Job重複頻率 end_date => NULL); -- Job結束時間 DBMS_SCHEDULER.SET_ATTRIBUTE( name => 'daily_backup_job', attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_OFF); DBMS_SCHEDULER.ENABLE( name => 'daily_backup_job'); -- 啟用Job END;
2. 使用DBMS_JOB package
DBMS_JOB package是在早期版本的Oracle資料庫中使用的調度方式,雖然其使用較為簡單,但是功能較為有限,現已不再推薦使用。
下面給出一個使用DBMS_JOB package創建Job的示例:
DECLARE l_jobno PLS_INTEGER; BEGIN DBMS_JOB.SUBMIT ( job => l_jobno, what => 'BEGIN my_backup_procedure; END;', next_date => SYSTIMESTAMP, -- Job開始時間 interval => 'TRUNC(SYSDATE+1)+2/24'); -- Job重複頻率 DBMS_OUTPUT.PUT_LINE('Job Number is:' || l_jobno); COMMIT; END;
三、管理Job
對於使用DBMS_SCHEDULER package創建的Job,可以使用DBMS_SCHEDULER package來管理Job。
下面給出一些常見的操作:
1. 禁用或啟用Job
-- 禁用Job DBMS_SCHEDULER.DISABLE('daily_backup_job'); -- 啟用Job DBMS_SCHEDULER.ENABLE('daily_backup_job');
2. 修改Job
-- 修改Job的重複頻率 DBMS_SCHEDULER.SET_ATTRIBUTE( name => 'daily_backup_job', attribute => 'repeat_interval', value => 'FREQ=DAILY;BYHOUR=3');
3. 刪除Job
-- 刪除Job DBMS_SCHEDULER.DROP_JOB('daily_backup_job');
對於使用DBMS_JOB package創建的Job,可以使用以下語句來刪除Job:
DECLARE l_jobno PLS_INTEGER := 1; BEGIN DBMS_JOB.REMOVE(l_jobno); END;
四、小結
Oracle資料庫中的Job是一種非常方便的自動化維護工具,使用起來相對方便,且具備靈活的定時調度功能。
使用DBMS_SCHEDULER package可以實現更多的操作,而早期版本中使用的DBMS_JOB package雖然功能局限,但仍有其特殊的用途。
在使用Job時需要注意其安全性和穩定性,避免對系統造成不必要的影響。
原創文章,作者:WVNYB,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/343226.html