

下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Oracle 定時執行計劃任務Oracle 在 10g 版本以前,計劃任務用的是 DBMS_JOB 包,10g 版本引入DBMS_SCHEDULER 來替代先前的 DBMS_JOB,在功能方面,它比 DBMS_JOB 提 供了更強大的功能和更靈活的機制 管理,但 DBMS_JOB 包的使用相對比較簡單,也 基本能夠滿足定時執行計劃任務的需求,故接下來就先看看 DBMS_JOB 包的使用 方法。1. DBMS_JOB我們可以在命令窗口輸入 show parameter job_queue_processe 查看數據庫中定 時任務 的最多并發數,一般設置為 10(設置方法:alter system
2、 set job_queue_processes=10如果 設為 0,那么數據庫定時作業是不會運行的。oracle 定時執行 job queue 的后臺進程是 SNP ,要啟動 snp,首先看系統模式是 否支持 sql alter system en able restricted session? sql alter system dise nable restrictedsessi on 利用上面的命令更改系統的會話方式為dise nable restricted 為 snp的啟動創建條件接下來我們嘗試實現以下功能:每隔一分鐘自動向 job_test 表中插入當前的系統 時間。1、創測試表
3、create table job_test(updatetime date;2、創建 JOBvariable v_job_ no nu mber;begi ndbms_job.submit(:v_j ob_no, in sert into job_test values(sysdate;, sysdate,sysdate+1/1440;end;/其中最后一個參數sysdate+1/1440 表示時間間隔為每分鐘。其它常用的時間間 隔的設置如下:(1 如果想每天凌晨 1 點執行,則此參數可設置為trunc(sysdate+25/24;(2 如果想每周一凌晨 1 點執行,則此參數可設置為tru n
4、c( next_day(sysdate,1+25/24;(3 如果想每月 1 號凌晨 1 點執行,則此參數可設置為tru nc(last_day(sysdate+25/24;(4 如果想每季度執行一次,則此參數可設置為tru nc(add_mo nths(sysdate,3,Q+1/24;SQL J mho謝psram etfer j ob_qntu_pr r.ct s sesNAMEmiVALUEjraciEEE10system set jS5=1O2 /System(5 如果想每半年執行一次,則此參數可設置為add_ mon ths(tru nc(sysdate,yyyy,6+1/24;(
5、6 如果想每年執行一次,則此參數可設置為add_mo nths(tru nc(sysdate,yyyy,12+1/24select * from user_jobs;-查看當前用戶的調度任務select * from dba_jobs_ru nnin g;-查看正在執行的調度任務select * from dba_jobs;-查看執行完的調度任務select * from all_jobs;-查看數據庫系統所有任務實例 1:1. 創建測試表create table a(a date;2. 創建一個存儲過程create or replace procedure test asbegi nin s
6、ert into a values(sysdate;end;/3. 創建 JOB (任務計劃variable job1 nu mber;begi ndbms_job.submit(:job1,test;,sysdate,sysdate+1/1440; end;-每天 1440 分鐘,即一分鐘運行 test 存儲過程一次4. 運行 JOBbegi ndbms_job.r un(:jobl;end;/5. 查看執行結果select to_char(a,yyyy/mm/dd hh24:mi:ss 時間 from a; 6.刪除 JOB begi ndbms_job.remove(:job1;end;
7、/job 的使用說明:DBMS_JOB.SUBMIT(:jobno,/job 號your_procedure;,/要 執行的過程trun c(sysdate+1/24,/下 次執行時間tru nc(sysdate+1/24+17 每次間隔時間刪除 job:dbms_job.remove(job no;修改要執行的操作:job:dbms_job.what(jobno,what;修改下次執行時間:dbms_job.next_date(job,next_date; 修改間隔時間:dbms_erval(job,interval;停止 job:dbms.broke n(job,broke
8、n,n extdate;啟動 job:dbms_job.r un (job no;例子:VARIABLE job no number;begi nDBMS_JOB.SUBMIT(:job no,Procdemo;,/Procdemo 為過程名稱SYSDATE, SYSDATE + 1/720;commit;end;描述Interval參數值每尺運行一次*SYSDATE + lr每小時運行一次*SYSDATE + 1/24*每10分鐘運行次*SYSDATE + 10/ (60* 24 J *每30杪運行一次*SYSDATE + 30/(60*24*60)r每隔一星期運行一次*SYSDATE +
9、T不再運行該任務井刪除它NULL每天午夜12點RUNCfSYSDATE + l)1每夭早上8點30分RUNCfSYSDATE + 1) +(8*60+30) /(24*60)*每星期二中午12點* N EXT DAY( T RU NC( SYS DAT E ), TUESDAY ) + 12/2每個力第-天的午夜匹點*TRU NC(LAST DAY( SYS DATE ) + l)1每個李度最后一處的晚上11點tTRUNC(ADD MONTHS(SYSDATE + 2/24, 2 ), Q ) 1每星期六和日早上6點10分*TRUNC( LEAST( NEXT_DAY(SYSDATE, *SA
10、TU RDAY,)/NEXT-DAYfSYSDATE,ISUNDAYH) +(6x60+10) /(24x 60)12. DBMS_SCHEDULERDBMS_SCHEDULER 的功能更強大,定義更靈活,增強了與系統的交互性。可以 有兩種方 式來定義計劃:1 使用 DBMS_SCHDULER.CREATE_SCHEDULE /定義一個計戈 U,計戈 U 再調用 job;2 調用 DBMS_SCHDULER.CREATE_JOB / 過程直接定義 job例子 1:用 DBMS_SCHDULER.CREATE_JOBE 直接創建 jobBEGINDBMS_SCHEDULER.CREATE_JOB
11、 (job_n ame = update_bb, /job 的名字job_type = STORED_PROCEDURE, /job 的類型為 執行存儲過程 ” job_action =OPS.SALES_PKG.UPDATE_SALES_SUMMARY, / 存儲過程的 名字start_date = 28-APR-10 07.00.00 PM Australia/Sydney,這里把時區去掉也可 以!repeatnterval = FREQ=DAILY;INTERVAL=2, /* every other day */enabled =true, /啟動該 jobcomme nts = My
12、 new job; 注釋END;/參數說明:job_name:顧名思義,每個 job 都必須有一個的名稱schedule_name:如果定義了計劃,在這里指定計劃的名稱job_type:目前支持三種類型:PLSQL_BLOCK : PL/SQL 塊:需要輸入完整的 PL/SQL 代碼;STORED_PROCEDURE :存儲過程:需要指定存儲過程的名字;EXECUTABLE:外部程序:(外部程序可以是一個 shell 腳本,也可以是操作系 統級別的指令.需要輸入 script 的名稱或者操作系統的指令名enabled:上面已經說過了,指定 job 創建完畢是否自動激活comme nts:對于
13、job 的簡單說明例子 2:BEGINDBMS_SCHEDULER.CREATE_JOB (job_ name = zbb_job3,job_type = PLSQL_BLOCK, /job 的類型是執行 sql 語句 job_action = insertinto bb values(1,sysdate;,start_date = sysdate,repeat_interval = freq = minutely; interval=1, 每分鐘執行一 次en abled = true,comme nts = my love;END;/注意:enabled 默認為 false , oracl
14、e 不會運行此 job,所有我們需要 enable 它SQL exec dbms_scheduler.e nable (zbb_job3;例子 3:使用 DBMS_SCHDULER.CREATE_SCHEDULE建立 scheduler 控制時間和頻率撚后給它添加幾個 jobs (動作!BEGINDBMS_SCHEDULER.CREATE_SCHEDULE ( / 倉 U 建計戈 U 任務schedule_ name = zbb_schedule,repeat_interval = FREQ=MINUTELY; INTERVAL=5, / 執行間隔:每 5 分鐘 comme nts = Eve
15、ry 5MINUTS;END;/接下來往 “ zbb_schedul 里添加一個 job “ zbb_job2 ”:BEGINDBMS_SCHEDULER.CREATE_JOB ( / 創建 job 并把它加入到 scheduler 里面 job_n ame =zbb_job2,job_type = PLSQL_BLOCK,job_action = in sert into bb values(1,sysdate;,schedule_name = ZBB_SCHEDULE;END;/再往 “ zbb_schedul 里添加一個 job “ zbb_job3 ”:BEGINDBMS_SCHEDU
16、LER.CREATE_JOB (job_n ame = zbb_job3,job_type = PLSQL_BLOCK,job_action = in sert into bb values(1,sysdate;,schedule_name = ZBB_SCHEDULE;END;運行 “ select job_name,schedule_name from user_scheduler_jo!S 以查看到所有 的 job。也可以將 “ zbb_job1 加入到 “ zbb_schedule ”SQL begi n2 dbms_scheduler.SET_ATTRIBUTE( 注意這里執行的是修
17、改屬性的過程3 n ame = zbb_job1,4 attribute = schedule, name,5 value = ZBB_SCHEDULE;6 end;7 /刪除 job 及 scheduler:SQL BEGINDBMS_SCHEDULER.DROP_JOB ( / 刪除 job ;多個 job 間用逗號隔開job_ name = zbb_job2,zbb_job3,force = TRUE;END;/如何刪除 scheduler :BEGINDBMS_SCHEDULER.DROP_SCHEDULE ( schedule_name = zbb_schedule, force E
18、ND; / 如何修改 job 的屬性(frequency:頻率):BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE ( n ame attribute valueEND; / = = = zbb_job1, repeatnterval, FREQ=DAILY; / 每天執行一次= true ; / 設為 true 強 制;falseo jobs 創建時為“disabled 犬態。我們必須手動 “enable 它:BEGIN DBMS_SCHEDULER.ENABLE(job1, job2, job3, sys.jobclass1, sys.jobclass2, sys.jo
19、bclass3; /* sys.jobclass1 下的所有 jobs 都會被enable */END;/ END; / 查看 job 的狀態:SELECT JOB_NAME, STATE FROM DBA_SCHEDULER_JOBSWHERE JOB_NAME = MY_EMP_JOB1;查看 Job Logs: SELECT JOB_NAME, OPERATION, OWNERFROM DBA_SCHEDULER_JOB_LOG;查看 Job 運行的詳細 情況:select log_id, job_name, status,to_char(log_date, DD-MON-YYYY HH
20、24: MI log_date from dba_scheduler_job_ru n_detailswhere job_name = MY_JOB14 如何管理 計劃任務的權限: GRANT SCHEDULER_ADMIN TO username;GRANTCREATEJOB TO scott; GRANT ALTER myjob1 TO scott;GRANT MANAGE SCHEDULER TO adam; PLSQL 舉例如下: beg in dbms_scheduler.create_job ( job_ name =測試, job_type = PLSQL_BLOCK, job_
21、action= in sert into job_test values(sysdate;, start_date = sysdate, en d_date = add_m on ths(sysdate,12000,repeat_i nterval = FREQ=MINUTELY; INTERVAL=1, en abled = true,comments =定時執行計劃任務;end;以上代碼可以通過在 PLSQL Developer 中新建 Jobs 輕松設定:參數含義如下:?JOB_NAME :指定任務的名稱,必選 值,注意要確保指定的名稱唯一。?JOB_TYPE :任務執行的操作類型,必選
22、值,有下列幾個可選值:?PLSQL_BLOCK :表示任務執行的是一個 PL/SQL 匿名塊。?STORED_PROCEDURE :表示任務執行的是 ORACLE 過程(含 PL/SQL PROCEDURE 和 JAVAPROCEDURE。EXECUTABLE :表示任務執行的是一個 外部程序,比如說操作系統命令。?CHAIN :表示任務執行的是一個 CHAIN。?JOB_ACTION :任務執行的操作, 必選值, 應與 JOB_TYPE 類型中指定的參數相 匹配。 比如說對于 PL/SQL匿名塊,此處就可以放置 PL/SQL 塊的具體代表,類似 DECLARE . BEGIN .END 這類
23、;如果是 ORACLE過程,那么此處應該指定具體 的過程名,注意由于任務 執行,即使過程中有 OUT 之類參數,實際執行時也不會 有輸出的。?START_DATE :指定任務初次執行的時間,本參數可為空,當為空時,表示任務立刻執行,效果等同于指定該參數值為 SYSDATE。?REPEAT_INTERVAL :指定任務執行的頻率,比如多長時間會被觸發再次執行。本參數 也可以為空,如果為空的話,就表示當前設定的任務只執行一次。REPEAT_INTERVAL 參數需要好好說說,REPEAT_INTERVAL 參數的語法結構 要復雜的多。其中最重要的是 FREQ 和 INTERVAL 兩個關鍵字。扌
24、REQ 關鍵字用 來指定間隔的時間周期,可選參數有:YEARLY, MONTHLY, WEEKLY, DAILY,HOURLY, MINUTELY, SECONDLY ,分別表示年、月、周、日、時、分、秒等單 位。INTERVAL 關鍵字用來指定間隔的頻繁,可指定的值的范圍從1-99。例女口: REPEAT_INTERVAL=FREQ=DAILY;INTERVAL=1;表示每天執行一次,女口 果將 INTERVAL改為 7 就表示每 7 天執行一次,效果等同于FREQ=WEEKLY;INTERVAL=1 。一般來說,使用 DBMS_SCHEDULER.CREATE_JOB 創建一個 JOB,至少需要指定上述參數中 的 前 3 項。除此之外,還可以在 CREATE_JOB 時,指定下列參數:?NUMBER_OF_ARGUMENTS :指定該 JOB 執行時需要附帶的參數的數量,默認 值為 0,注意當JOB_TYPE 列值為 PLSQL_BLOCK 或 CHAIN 時,本參數必須設 置為 0,因為上述兩種情況 下不支持附帶參數。?END_DATE :指定任務的過期 時間,默認值為 NULL。任務過期后,任務的 STATE 將自動被修改為 COMPLETED,ENABLED 被置為 FALSE。如果該參數設置為空的話,表示該任 務永不過期,將一直按照
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 部門廉潔協議書
- 線上授課協議書
- 自動房產協議書
- 煤礦招工合同及協議書
- 老人搭伴協議書
- 紅汞交易協議書
- 股份企業協議書
- 無產權售房合同協議書
- 空調處置協議書
- 草地鋪設協議書
- 2025年牛津譯林版英語七年級下冊全冊單元重點知識點與語法匯編
- 2024-2025年能源管理系統(EMS)行業市場分析報告
- 2024上海中考英語試卷及答案
- 財務管理專業就業指導
- 2024年江蘇省徐州市中考道德與法治試卷(附真題答案)
- 2024年大學生道德觀
- 肩袖損傷的治療及護理
- 醫療設備供貨計劃與應急保障方案
- 《“的、地、得”的用法》教學設計-2024-2025學年統編版語文二年級上冊
- 2《登高》公開課一等獎創新教學設計 統編版高中語文必修上冊
- 保安服務監督方案
評論
0/150
提交評論