DBMS_JOB和DBMS_SCHEDULER都是Oracle提供的程序包,均可以用來建立、管理job,其中DBMS_SCHEDULER的功能更爲強大。先解釋scheduler的基礎概念,scheduler 包含了如下幾個實體對象: Program -- 提供了scheduler 將要運行什麼,包含program name,program type(PL/SQ塊、存儲過程、外部程序),program action(具體的程序實體,好比說一個PL/SQL塊、或者是存儲過程的名稱、或者是外部程序的路徑加名稱) 。 Schedules -- 指定什麼時候何種頻率來運行job,能夠被不一樣的job重複的利用。好比說我有兩個job都要求在天天的凌晨4點運行,那麼兩個job能夠同時指定相同的schedule。 Jobs -- 具體的做業的名稱,依賴於那個program、schedule。也能夠不指定program、schedule,而直接寫入program、schedule的相應參數。 另外,須要注意的是,經過DBMS_JOB和DBMS_SCHEDULER建立的job信息存儲在不一樣的數據字典中,其中,經過DBMS_JOB建立的job信息存儲在user_jobs,而經過DBMS_SCHEDULER建立的job信息存儲在user_scheduler_jobs中。 下面,分別使用DBMS_JOB和DBMS_SCHEDULER來建立job。 使用DBMS_JOB 1.建立測試表 點擊(此處)摺疊或打開 SQL> create table hoegh(h1 date); Table created SQL> 2.建立存儲過程,向hoegh表中插入一條數據 點擊(此處)摺疊或打開 SQL> SQL> create or replace procedure pro_hoegh is 2 begin 3 insert into hoegh values(sysdate); 4 COMMIT; 5 end pro_hoegh; 6 / Procedure created SQL> 3.建立job 點擊(此處)摺疊或打開 SQL> SQL> variable job1 number SQL> begin 2 dbms_job.submit(:job1,\'pro_hoegh;\',sysdate,\'sysdate+1/1440\');--天天1440分鐘,即一分鐘運行test過程一次 3 end; 4 / PL/SQL procedure successfully completed job1 --------- 1 SQL> 4.執行job 點擊(此處)摺疊或打開 SQL> SQL> begin 2 dbms_job.run(:job1); 3 end; 4 / PL/SQL procedure successfully completed job1 --------- 1 SQL> 兩分鐘後,查詢測試表,確認job是否正常執行 點擊(此處)摺疊或打開 SQL> select to_char(h1,\'yyyy-mm-dd HH24:mi:ss\') H1 from hoegh; H1 ------------------- 2015-04-28 16:08:23 2015-04-28 16:07:21 SQL> 5.中止job 點擊(此處)摺疊或打開 SQL> SQL> begin 2 dbms_job.broken(1,true); 3 end; 4 / PL/SQL procedure successfully completed SQL> 其中,1是建立job是定義的變量值,能夠惟一標識一個job 6.啓用job 點擊(此處)摺疊或打開 SQL> SQL> begin 2 dbms_job.broken(1,false); 3 end; 4 / PL/SQL procedure successfully completed SQL> 7.刪除job 點擊(此處)摺疊或打開 SQL> SQL> begin 2 dbms_job.remove(1); 3 end; 4 / PL/SQL procedure successfully completed SQL> 使用DBMS_SCHEDULER 1.建立測試表 點擊(此處)摺疊或打開 SQL> create table hoegh(h1 date); Table created SQL> 2.建立存儲過程,向hoegh表中插入一條數據 點擊(此處)摺疊或打開 SQL> SQL> create or replace procedure pro_hoegh is 2 begin 3 insert into hoegh values(sysdate); 4 COMMIT; 5 end pro_hoegh; 6 / Procedure created SQL> 3.建立schedule 在schedule中定義了schedule名稱、起止時間、調用間隔等參數。 點擊(此處)摺疊或打開 SQL> SQL> begin 2 -- create_schedule 3 dbms_scheduler.create_schedule(schedule_name => \'schedule_hoegh\', 4 start_date => \'28-4月 -15 4.30.00.000 下午\', 5 repeat_interval => \'FREQ=MINUTELY; INTERVAL=1\', 6 end_date => \'29-4月 -15 4.30.00.000 下午\', 7 comments => \'TEST schedule\'); 8 end; 9 / PL/SQL procedure successfully completed SQL> 4.建立program 在program中定義了程序的類型、具體操做、參數個數等參數 點擊(此處)摺疊或打開 SQL> SQL> begin 2 -- create_program 3 dbms_scheduler.create_program(program_name => \'program_hoegh\', 4 program_type => \'PLSQL_BLOCK\', 5 program_action => \'BEGIN PRO_HOEGH; END;\', 6 number_of_arguments => 0, 7 enabled => TRUE, 8 comments => \'TEST program\'); 9 end; 10 / PL/SQL procedure successfully completed SQL> 5.建立job 在job中指定了job_name,以及相關聯的program_name、schedule_name等參數。 點擊(此處)摺疊或打開 SQL> SQL> begin 2 -- create_job 3 dbms_scheduler.create_job(job_name => \'job_hoegh\', 4 program_name => \'program_hoegh\', 5 schedule_name => \'schedule_hoegh\', 6 job_class => \'DEFAULT_JOB_CLASS\', 7 enabled => true, 8 auto_drop => true, 9 comments => \'TEST procedure\'); 10 end; 11 / PL/SQL procedure successfully completed SQL> 6.執行job 點擊(此處)摺疊或打開 SQL> SQL> begin 2 -- Call the procedure 3 dbms_scheduler.run_job(job_name => \'job_hoegh\', 4 use_current_session => false); 5 end; 6 / PL/SQL procedure successfully completed SQL> 幾分鐘後,查詢測試表,確認job是否正常執行 點擊(此處)摺疊或打開 SQL> select to_char(h1,\'yyyy-mm-dd HH24:mi:ss\') H1 from hoegh; H1 ------------------- 2015-04-28 16:30:00 2015-04-28 16:31:00 2015-04-28 16:32:00 2015-04-28 16:24:25 SQL> 7.禁用job 點擊(此處)摺疊或打開 SQL> SQL> begin 2 dbms_scheduler.disable(\'job_hoegh\'); 3 end; 4 / PL/SQL procedure successfully completed SQL> SQL> select job_name,enabled,state from user_scheduler_jobs; JOB_NAME ENABLED STATE ------------------------------ ------- --------------- JOB_HOEGH FALSE DISABLED SQL> 8.啓用job 點擊(此處)摺疊或打開 SQL> SQL> begin 2 dbms_scheduler.enable(\'job_hoegh\'); 3 end; 4 / PL/SQL procedure successfully completed SQL> SQL> select job_name,enabled,state from user_scheduler_jobs; JOB_NAME ENABLED STATE ------------------------------ ------- --------------- JOB_HOEGH TRUE SCHEDULED SQL> 9.刪除job 點擊(此處)摺疊或打開 SQL> SQL> begin 2 dbms_scheduler.drop_job(\'job_hoegh\'); 3 end; 4 / PL/SQL procedure successfully completed SQL> SQL> select job_name,enabled,state from user_scheduler_jobs; JOB_NAME ENABLED STATE ------------------------------ ------- --------------- SQL>
DBMS_JOB和DBMS_SCHEDULER都是Oracle提供的程序包,均可以用來建立、管理job,其中DBMS_SCHEDULER的功能更爲強大。先解釋scheduler的基礎概念,scheduler 包含了如下幾個實體對象: css
另外,須要注意的是,經過DBMS_JOB和DBMS_SCHEDULER建立的job信息存儲在不一樣的數據字典中,其中,經過DBMS_JOB建立的job信息存儲在user_jobs,而經過DBMS_SCHEDULER建立的job信息存儲在user_scheduler_jobs中。
下面,分別使用DBMS_JOB和DBMS_SCHEDULER來建立job。
使用DBMS_JOB
1.建立測試表
web
點擊(此處)摺疊或打開session
2.建立存儲過程,向hoegh表中插入一條數據
app
點擊(此處)摺疊或打開測試
3.建立job
spa
點擊(此處)摺疊或打開code
4.執行job
orm
點擊(此處)摺疊或打開對象
兩分鐘後,查詢測試表,確認job是否正常執行
blog
點擊(此處)摺疊或打開
5.中止job
點擊(此處)摺疊或打開
其中,1是建立job是定義的變量值,能夠惟一標識一個job
6.啓用job
點擊(此處)摺疊或打開
7.刪除job
點擊(此處)摺疊或打開
使用DBMS_SCHEDULER
1.建立測試表
點擊(此處)摺疊或打開
2.建立存儲過程,向hoegh表中插入一條數據
點擊(此處)摺疊或打開
3.建立schedule
在schedule中定義了schedule名稱、起止時間、調用間隔等參數。
點擊(此處)摺疊或打開
4.建立program
在program中定義了程序的類型、具體操做、參數個數等參數
點擊(此處)摺疊或打開
5.建立job
在job中指定了job_name,以及相關聯的program_name、schedule_name等參數。
點擊(此處)摺疊或打開
6.執行job
點擊(此處)摺疊或打開
幾分鐘後,查詢測試表,確認job是否正常執行
點擊(此處)摺疊或打開
7.禁用job
點擊(此處)摺疊或打開
8.啓用job
點擊(此處)摺疊或打開
9.刪除job
點擊(此處)摺疊或打開