Oracle中定時(shí)任務(wù)的使用(創(chuàng)建查看刪除等)
一、了解什么是定時(shí)任務(wù)?
job是oracle的定時(shí)任務(wù),又叫定時(shí)器,定時(shí)作業(yè),作業(yè)定時(shí)地自動(dòng)執(zhí)行一些腳本,或作數(shù)據(jù)備份,或作數(shù)據(jù)提煉,或作數(shù)據(jù)庫(kù)性能的優(yōu)化,或作重建索引等等的工作,需要用到j(luò)ob。
Job是一種被調(diào)度執(zhí)行的任務(wù)。Job可以是一個(gè)PL/SQL塊、一個(gè)SQL語(yǔ)句、一個(gè)外部腳本或程序等。它們可以被定時(shí)調(diào)度執(zhí)行,也可以被手動(dòng)啟動(dòng)執(zhí)行。
二、創(chuàng)建job
Ⅰ、語(yǔ)法一
declare v_job_id number; begin dbms_job.submit(job =>v_job_id, --job號(hào) what =>'pro_name/DML;', --定時(shí)執(zhí)行的腳本(簡(jiǎn)稱(chēng)你要干什么) next_date=>sysdate+1, --第一次執(zhí)行的時(shí)間 interval =>'SYSDATE+1/24/60' --間隔時(shí)間 ); --commit; end;
該語(yǔ)法是使用dbms_job包提交一個(gè)定時(shí)任務(wù):
- 1. `declare`和`begin`是PL/SQL代碼塊的開(kāi)始和結(jié)束標(biāo)志。
- 2. `v_job_id`是一個(gè)變量,用于存儲(chǔ)job的id號(hào)。
- 3. `dbms_job.submit`是提交一個(gè)job的過(guò)程,包括以下參數(shù):
- - `job`:job的id號(hào),由Oracle自動(dòng)生成。
- - `what`:定時(shí)執(zhí)行的腳本,可以是一個(gè)存儲(chǔ)過(guò)程或SQL語(yǔ)句。
- - `next_date`:job第一次執(zhí)行的時(shí)間,可以是一個(gè)日期類(lèi)型的變量或者表達(dá)式。
- - `interval`:job的執(zhí)行間隔時(shí)間,可以是一個(gè)日期類(lèi)型的變量或者表達(dá)式,例如`SYSDATE+1/24/60`表示每隔1分鐘執(zhí)行一次。
- 4. `commit`是一個(gè)事務(wù)提交語(yǔ)句,用于將提交的job保存到數(shù)據(jù)庫(kù)中。
注意:
使用dbms_job提交的job只能在Oracle數(shù)據(jù)庫(kù)中執(zhí)行,不能跨數(shù)據(jù)庫(kù)執(zhí)行。另外,使用dbms_job提交的job在Oracle 10g及以上版本中已經(jīng)被廢棄,推薦使用dbms_scheduler包提交job。
比如創(chuàng)建定時(shí)任務(wù),每分鐘執(zhí)行一次pkg_2.p1,向emp2表中插入員工編號(hào)為7788的員工信息:
declare v1 number; begin dbms_job.submit(job => v1, what => 'insert into emp2 select * from emp where empno=7788;', next_date => sysdate,--立即執(zhí)行 interval => 'SYSDATE+1/24/60'); commit; end;
其中emp2表為空表,查詢(xún)當(dāng)前時(shí)間,然后我們執(zhí)行這個(gè)定時(shí)任務(wù)
select sysdate from dual;
等待一段時(shí)間后,我們查看表emp2內(nèi)的數(shù)據(jù):
經(jīng)過(guò)四分鐘后,從表中可以發(fā)現(xiàn)有四條數(shù)據(jù)。
Ⅱ、語(yǔ)法二:
使用DBMS_SCHEDULER包來(lái)創(chuàng)建和管理job,具體語(yǔ)法如下:
BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => 'job_name', -- job的名稱(chēng) job_type => 'PLSQL_BLOCK', -- job的類(lèi)型,可以是PLSQL_BLOCK、STORED_PROCEDURE等 job_action => 'begin my_proc(); end;', -- job執(zhí)行的腳本或存儲(chǔ)過(guò)程 start_date => SYSTIMESTAMP, -- job開(kāi)始執(zhí)行的時(shí)間 repeat_interval => 'FREQ=DAILY; INTERVAL=1', -- job執(zhí)行的間隔時(shí)間 enabled => TRUE -- 是否啟用job ); END; /
DBMS_SCHEDULER包提供了豐富的job管理功能,可以設(shè)置job的執(zhí)行時(shí)間、執(zhí)行間隔、執(zhí)行次數(shù)、執(zhí)行優(yōu)先級(jí)、并發(fā)控制等屬性,實(shí)際應(yīng)用中可以根據(jù)具體需求靈活配置。
三、查看job
select * from user_jobs;
結(jié)果如下:
從運(yùn)行結(jié)果中可以知道定時(shí)任務(wù)的JOB編號(hào)為23,登錄用戶(hù)為SCOTT等信息。
其中user_jobs是一個(gè)視圖,是 Oracle 數(shù)據(jù)庫(kù)中的一個(gè)系統(tǒng)表,它用于存儲(chǔ)由 DBMS_JOB.SUBMIT 提交的作業(yè)(job)的信息。該表包含了提交的作業(yè)的 ID 號(hào)、作業(yè)的描述、作業(yè)的下一次執(zhí)行時(shí)間、作業(yè)的執(zhí)行間隔時(shí)間、作業(yè)的狀態(tài)等信息。用戶(hù)可以查詢(xún)?cè)摫韥?lái)獲取作業(yè)的信息,也可以使用該表來(lái)管理作業(yè)的狀態(tài)、修改作業(yè)的執(zhí)行時(shí)間等。
注意:
該表只能查看和管理由當(dāng)前用戶(hù)提交的作業(yè),不能查看和管理其他用戶(hù)提交的作業(yè)。
其實(shí)在Oracle中,可以使用以下SQL語(yǔ)句來(lái)查看定時(shí)任務(wù)Job的信息:
SELECT job_name, job_type, enabled, state, last_start_date, next_run_date FROM dba_scheduler_jobs;
該語(yǔ)句會(huì)列出所有的Job,包括Job的名稱(chēng)、類(lèi)型、是否啟用、狀態(tài)、上次執(zhí)行時(shí)間和下次執(zhí)行時(shí)間等信息。其中,dba_scheduler_jobs是一個(gè)系統(tǒng)視圖,可以查看所有的Job信息。如果只需要查看當(dāng)前用戶(hù)的Job,可以使用USER_SCHEDULER_JOBS視圖。
另外,也可以使用以下SQL語(yǔ)句來(lái)查看某個(gè)Job的詳細(xì)信息:
SELECT * FROM dba_scheduler_jobs WHERE job_name = 'job_name';
該語(yǔ)句會(huì)列出指定Job的所有信息,包括Job的類(lèi)型、執(zhí)行時(shí)間、重復(fù)間隔、執(zhí)行程序等。
查看定時(shí)任務(wù)Job的信息只需要使用一些系統(tǒng)視圖或者SQL語(yǔ)句就可以輕松實(shí)現(xiàn)。這些信息可以幫助管理員了解定時(shí)任務(wù)的執(zhí)行情況,及時(shí)發(fā)現(xiàn)和解決問(wèn)題。
四、刪除Job
Ⅰ、調(diào)用dbms_job.remove實(shí)現(xiàn):
call dbms_job.remove(23); commit;
從上面查看job信息知道編號(hào)是23!然后調(diào)用存過(guò) dbms_job.remove
其中dbms_job.remove是一個(gè)包名,是Oracle 數(shù)據(jù)庫(kù)中的一個(gè)過(guò)程,用于刪除一個(gè)已經(jīng)存在的作業(yè)(job)。它的語(yǔ)法如下:
DBMS_JOB.REMOVE ( job IN BINARY_INTEGER);
其中,job 參數(shù)表示要?jiǎng)h除的作業(yè)的 ID 號(hào)。調(diào)用該過(guò)程后,指定 ID 號(hào)的作業(yè)將被從數(shù)據(jù)庫(kù)中刪除。
注意:
該過(guò)程只能刪除由 DBMS_JOB.SUBMIT 提交的作業(yè),不能刪除由 DBMS_SCHEDULER.SUBMIT 創(chuàng)建的作業(yè)。
Ⅱ、使用下面語(yǔ)句完成job刪除:
BEGIN DBMS_SCHEDULER.DROP_JOB ( job_name => 'job_name', -- job的名稱(chēng) force => FALSE -- 是否強(qiáng)制刪除job ); END; /
其中,job_name是要?jiǎng)h除的Job的名稱(chēng),force參數(shù)表示是否強(qiáng)制刪除Job。如果force參數(shù)為T(mén)RUE,則會(huì)強(qiáng)制刪除Job及其關(guān)聯(lián)的所有對(duì)象(例如,程序、鏈、計(jì)劃等)。如果force參數(shù)為FALSE,則只會(huì)刪除Job本身。
五、停止Job
begin dbms_job.broken(23,true); commit; end;
上述命令即可停止job的執(zhí)行。
其中dbms_job.broken 是 Oracle 數(shù)據(jù)庫(kù)中的一個(gè)過(guò)程,用于標(biāo)記一個(gè)作業(yè)(job)為失效狀態(tài)。它的語(yǔ)法如下:
DBMS_JOB.BROKEN ( job IN BINARY_INTEGER, broken IN BOOLEAN, next_date IN DATE DEFAULT NULL, interval IN VARCHAR2 DEFAULT NULL);
其中,job 參數(shù)表示要標(biāo)記為失效的作業(yè)的 ID 號(hào);broken 參數(shù)表示是否將作業(yè)標(biāo)記為失效狀態(tài),true 表示失效,false 表示恢復(fù);next_date 參數(shù)表示作業(yè)下一次執(zhí)行的時(shí)間;interval 參數(shù)表示作業(yè)執(zhí)行的間隔時(shí)間。
調(diào)用該過(guò)程后,指定 ID 號(hào)的作業(yè)將被標(biāo)記為失效狀態(tài)。如果 broken 參數(shù)為 true,則該作業(yè)將被標(biāo)記為失效,不再執(zhí)行;如果為 false,則該作業(yè)將被恢復(fù)為正常狀態(tài)。如果指定了 next_date 和 interval 參數(shù),則會(huì)更新作業(yè)的下一次執(zhí)行時(shí)間和執(zhí)行間隔時(shí)間。
或者使用下面命令也可以實(shí)現(xiàn)停止job:
BEGIN DBMS_SCHEDULER.STOP_JOB ( job_name => 'job_name', force_option => 'IMMEDIATE', commit_semantics=> 'ABORT'); END;
其中,job_name是要停止的Job的名稱(chēng),force_option參數(shù)表示停止Job的方式,可以為IMMEDIATE或CASCADE。如果force_option為IMMEDIATE,則會(huì)立即停止Job的執(zhí)行。如果force_option為CASCADE,則會(huì)將Job及其關(guān)聯(lián)的所有對(duì)象都停止。commit_semantics參數(shù)表示停止Job的提交語(yǔ)義,可以為COMMIT或ABORT。如果commit_semantics為COMMIT,則會(huì)提交Job的事務(wù),并將Job狀態(tài)設(shè)置為STOPPED。如果commit_semantics為ABORT,則會(huì)回滾Job的事務(wù),并將Job狀態(tài)設(shè)置為BROKEN。
六、立即執(zhí)行job
call dbms_job.run(23);
dbms_job.run 是 Oracle 數(shù)據(jù)庫(kù)中的一個(gè)過(guò)程,用于立即執(zhí)行一個(gè)作業(yè)(job)。它的語(yǔ)法如下:
DBMS_JOB.RUN ( job IN BINARY_INTEGER);
其中,job 參數(shù)表示要執(zhí)行的作業(yè)的 ID 號(hào)。調(diào)用該過(guò)程后,指定 ID 號(hào)的作業(yè)將被立即執(zhí)行一次。如果該作業(yè)正在執(zhí)行中,則該過(guò)程不會(huì)產(chǎn)生任何效果,直到該作業(yè)執(zhí)行完畢后再執(zhí)行一次。
注意:
該過(guò)程也是只能執(zhí)行由 DBMS_JOB.SUBMIT 提交的作業(yè),不能執(zhí)行由 DBMS_SCHEDULER.SUBMIT 創(chuàng)建的作業(yè)。
七、修改job
BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE ( name => 'job_name', -- job的名稱(chēng) attribute => 'start_date', -- 要修改的屬性名稱(chēng) value => SYSTIMESTAMP + INTERVAL '1' DAY -- 修改后的屬性值 ); END; /
該語(yǔ)法是使用DBMS_SCHEDULER包修改job的開(kāi)始時(shí)間:
- 1. `BEGIN`和`END`是PL/SQL代碼塊的開(kāi)始和結(jié)束標(biāo)志。
- 2. `DBMS_SCHEDULER.SET_ATTRIBUTE`是修改job屬性的過(guò)程,包括以下參數(shù):
- - `name`:job的名稱(chēng)。
- - `attribute`:要修改的屬性名稱(chēng),可以是start_date、repeat_interval、end_date等。
- - `value`:修改后的屬性值,可以是一個(gè)日期類(lèi)型的變量或者表達(dá)式。
- 3. `job_name`是要修改的job的名稱(chēng)。
- 4. `SYSTIMESTAMP + INTERVAL '1' DAY`表示將job的開(kāi)始時(shí)間修改為當(dāng)前時(shí)間加上1天后的時(shí)間。
- 5. `/`是PL/SQL代碼塊的結(jié)束標(biāo)志。
注意:
使用DBMS_SCHEDULER包修改job的屬性時(shí),需要保證job已經(jīng)存在。如果job不存在,則需要先使用CREATE_JOB過(guò)程創(chuàng)建job,然后再使用SET_ATTRIBUTE過(guò)程修改job的屬性。
八、job執(zhí)行失敗
job 執(zhí)行失敗可能有多種原因,例如作業(yè)的執(zhí)行時(shí)間沖突、作業(yè)依賴(lài)的對(duì)象不存在或無(wú)效、作業(yè)執(zhí)行時(shí)發(fā)生錯(cuò)誤等。以下是一些常見(jiàn)的解決方法:
- 1. 檢查作業(yè)的執(zhí)行時(shí)間是否與其他作業(yè)沖突,如果沖突則需要調(diào)整作業(yè)的執(zhí)行時(shí)間。
- 2. 檢查作業(yè)依賴(lài)的對(duì)象是否存在或有效,如果不存在或無(wú)效則需要修復(fù)或重新創(chuàng)建這些對(duì)象。
- 3. 檢查作業(yè)執(zhí)行時(shí)是否發(fā)生了錯(cuò)誤,如果發(fā)生了錯(cuò)誤則需要查看錯(cuò)誤日志或調(diào)試信息,修復(fù)錯(cuò)誤并重新執(zhí)行作業(yè)。
- 4. 檢查作業(yè)的執(zhí)行權(quán)限是否正確,如果權(quán)限不足則需要授權(quán)或修改作業(yè)的執(zhí)行用戶(hù)。
- 5. 檢查作業(yè)的定時(shí)器是否正確,如果定時(shí)器不正確則需要修改作業(yè)的執(zhí)行時(shí)間或執(zhí)行間隔。
- 6. 檢查作業(yè)的運(yùn)行環(huán)境是否正確,例如作業(yè)依賴(lài)的環(huán)境變量、路徑、配置文件等是否正確設(shè)置。
- 7. 如果以上方法都無(wú)法解決問(wèn)題,則需要進(jìn)一步分析作業(yè)執(zhí)行的情況,例如查看作業(yè)的日志、調(diào)試信息、執(zhí)行計(jì)劃等,找出問(wèn)題并修復(fù)。
總結(jié):
解決 job 執(zhí)行失敗問(wèn)題需要綜合考慮多個(gè)因素,需要對(duì)作業(yè)的執(zhí)行情況進(jìn)行全面分析和細(xì)致調(diào)試,才能找到問(wèn)題并解決。同時(shí),為了避免作業(yè)執(zhí)行失敗,需要在設(shè)計(jì)作業(yè)時(shí)考慮各種可能的情況,并采取相應(yīng)的措施來(lái)保證作業(yè)的正確執(zhí)行。
如果一個(gè)作業(yè)(job)執(zhí)行失敗,Oracle 數(shù)據(jù)庫(kù)會(huì)根據(jù)作業(yè)的重試次數(shù)和重試間隔時(shí)間來(lái)進(jìn)行重試。默認(rèn)情況下,Oracle 數(shù)據(jù)庫(kù)會(huì)在作業(yè)執(zhí)行失敗后立即進(jìn)行重試,最多重試 16 次,每次重試的間隔時(shí)間為 5 分鐘。也就是說(shuō),如果一個(gè)作業(yè)執(zhí)行失敗,Oracle 數(shù)據(jù)庫(kù)會(huì)在 5 分鐘后再次嘗試執(zhí)行該作業(yè),如果該次執(zhí)行仍然失敗,則會(huì)繼續(xù)重試,直到達(dá)到最大重試次數(shù)為止。
注意:
作業(yè)的重試次數(shù)和重試間隔時(shí)間可以通過(guò) DBMS_JOB.CHANGE 或 DBMS_SCHEDULER.SET_ATTRIBUTE 進(jìn)行修改。用戶(hù)可以根據(jù)實(shí)際情況來(lái)設(shè)置作業(yè)的重試次數(shù)和重試間隔時(shí)間,以便更好地管理作業(yè)的執(zhí)行。同時(shí),如果作業(yè)的重試次數(shù)和重試間隔時(shí)間設(shè)置不當(dāng),可能會(huì)導(dǎo)致作業(yè)長(zhǎng)時(shí)間無(wú)法執(zhí)行或頻繁重試,影響系統(tǒng)的穩(wěn)定性和性能。因此,在設(shè)置作業(yè)的重試次數(shù)和重試間隔時(shí)間時(shí)需要慎重考慮。
通常情況下:
- 1、每次重試時(shí)間都是遞增的,第一次1分鐘,2分鐘,4分鐘,8分鐘 ... 依此類(lèi)推。
- 2、當(dāng)超過(guò)1440分鐘,也就是24小時(shí)的時(shí)候,固定的重試時(shí)間為1天。
- 3、超過(guò)16次重試后,job就會(huì)被標(biāo)記為broken,next_date為4000-1-1,也就是不再進(jìn)行job重試。16次重試的時(shí)間大概是7天半。
其中前兩條這樣設(shè)計(jì)的目的是為了避免在短時(shí)間內(nèi)頻繁地重試,降低系統(tǒng)的負(fù)載,同時(shí)也能夠保證任務(wù)能夠在合理的時(shí)間內(nèi)得到處理。
而第三條是因?yàn)樵?Oracle 中,如果一個(gè)作業(yè)(job)執(zhí)行失敗達(dá)到最大重試次數(shù)后,該作業(yè)會(huì)被標(biāo)記為 "broken" 狀態(tài),同時(shí)下一次執(zhí)行時(shí)間會(huì)被設(shè)置為 4000-01-01,即不再對(duì)該作業(yè)進(jìn)行重試。這是 Oracle 數(shù)據(jù)庫(kù)的默認(rèn)行為,旨在防止無(wú)限制地重試失敗的作業(yè),避免對(duì)系統(tǒng)造成過(guò)大的負(fù)擔(dān)和風(fēng)險(xiǎn)。
當(dāng)作業(yè)被標(biāo)記為 "broken" 狀態(tài)后,用戶(hù)可以通過(guò)調(diào)用 DBMS_JOB.BROKEN 過(guò)程來(lái)修改作業(yè)的狀態(tài),例如將作業(yè)恢復(fù)為正常狀態(tài)、更新作業(yè)的下一次執(zhí)行時(shí)間和執(zhí)行間隔時(shí)間等。同時(shí),用戶(hù)也可以通過(guò)修改作業(yè)的重試次數(shù)和重試間隔時(shí)間來(lái)避免作業(yè)被標(biāo)記為 "broken" 狀態(tài),以便更好地管理作業(yè)的執(zhí)行。
注意:
對(duì)于那些不需要重試的作業(yè),用戶(hù)可以將其重試次數(shù)設(shè)置為 0,以避免對(duì)系統(tǒng)造成不必要的負(fù)擔(dān)和風(fēng)險(xiǎn)。
如果Oracle中出現(xiàn)job重復(fù)調(diào)用16次的情況,可能是由于job的重試機(jī)制導(dǎo)致的。為了避免這種情況,可以考慮以下幾種解決辦法:
- 1. 修改job的重試次數(shù)和重試時(shí)間:可以通過(guò)修改job的重試次數(shù)和重試時(shí)間來(lái)避免job出現(xiàn)過(guò)多的重試??梢詫⒅卦嚧螖?shù)設(shè)置為一個(gè)較小的值,例如3次或5次,同時(shí)將重試時(shí)間設(shè)置為一個(gè)適當(dāng)?shù)闹担缑看沃卦囍g間隔5分鐘或10分鐘。
- 2. 使用唯一的標(biāo)識(shí)符:可以在job中使用唯一的標(biāo)識(shí)符來(lái)避免重復(fù)調(diào)用。例如,可以在job中設(shè)置一個(gè)唯一的ID,每次調(diào)用時(shí)檢查該ID是否已經(jīng)存在,如果存在則不繼續(xù)執(zhí)行,否則執(zhí)行任務(wù)。
- 3. 使用分布式鎖:可以使用分布式鎖來(lái)避免job重復(fù)調(diào)用。例如,可以使用Redis等分布式緩存工具來(lái)實(shí)現(xiàn)分布式鎖,每次調(diào)用job時(shí)先獲取鎖,執(zhí)行任務(wù)完畢后釋放鎖,這樣可以保證同一時(shí)間只有一個(gè)job在執(zhí)行。
- 4. 使用數(shù)據(jù)庫(kù)事務(wù):可以使用數(shù)據(jù)庫(kù)事務(wù)來(lái)避免job重復(fù)調(diào)用。例如,在job執(zhí)行前先檢查數(shù)據(jù)庫(kù)中是否已經(jīng)存在相同的記錄,如果存在則回滾事務(wù),否則執(zhí)行任務(wù)并提交事務(wù)。
我們也可以創(chuàng)建一張空表,用來(lái)接收數(shù)據(jù) create table t_k(id number(1)),然后創(chuàng)建一個(gè)存過(guò),里面包含真實(shí)的存儲(chǔ)過(guò)程。如下所示:
create or replace pro_寫(xiě)到j(luò)ob中 is v_cnt number; begin insert into t_k(id) values(1); commit; select count(1) into v_cnt from t_k; if v_cnt=1 then pro_真實(shí)(); 正確處理; else 錯(cuò)誤處理(比如向報(bào)錯(cuò)表中插入一條數(shù)據(jù);打印錯(cuò)誤;raise_application_error報(bào)錯(cuò);發(fā)郵件) end if; end; declare v_jobid number; begin dbms_job.submit(job => v_jobid, what => 'pro_寫(xiě)到j(luò)ob中', next_date => trunc(sysdate,'dd')+3/24,--第一次執(zhí)行的時(shí)間,夜里三點(diǎn) interval => 'trunc(sysdate,''dd'')+1');--間隔時(shí)間,每天執(zhí)行 commit; end;
九、job用法
接下來(lái)展示一個(gè)完整的job用例!??!
假設(shè)我們需要定期清理一個(gè)名為CUSTOMER的表中的過(guò)期數(shù)據(jù),使用Job來(lái)實(shí)現(xiàn)。
1. 創(chuàng)建一個(gè)PL/SQL塊,用于清理過(guò)期數(shù)據(jù):
CREATE OR REPLACE PROCEDURE clean_customer_data AS BEGIN DELETE FROM customer WHERE expiration_date < SYSDATE; COMMIT; END;
2. 創(chuàng)建一個(gè)Job,用于定期執(zhí)行clean_customer_data存儲(chǔ)過(guò)程:
BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => 'clean_customer_data_job', job_type => 'STORED_PROCEDURE', job_action => 'clean_customer_data', start_date => SYSDATE, repeat_interval => 'FREQ=DAILY; INTERVAL=1', enabled => TRUE, comments => '清理過(guò)期數(shù)據(jù)'); END;
其中,job_name是Job的名稱(chēng),job_type表示Job的類(lèi)型,可以為STORED_PROCEDURE、PLSQL_BLOCK、EXECUTABLE等。job_action是要執(zhí)行的任務(wù),可以是存儲(chǔ)過(guò)程、PL/SQL塊、外部程序等。start_date是Job的開(kāi)始時(shí)間,repeat_interval表示Job的重復(fù)執(zhí)行間隔,可以使用各種時(shí)間間隔語(yǔ)法。enabled表示Job是否啟用,comments是Job的注釋。
3. 檢查Job是否正常運(yùn)行:
SELECT job_name, state, last_start_date, next_run_date FROM dba_scheduler_jobs WHERE job_name = 'clean_customer_data_job';
該語(yǔ)句可以查看Job的狀態(tài)、上次執(zhí)行時(shí)間和下次執(zhí)行時(shí)間等信息。
4. 如果需要停止或刪除Job,可以使用以下語(yǔ)句:
停止Job:
BEGIN DBMS_SCHEDULER.STOP_JOB ( job_name => 'clean_customer_data_job', force_option => 'IMMEDIATE', commit_semantics=> 'ABORT'); END;
刪除Job:
BEGIN DBMS_SCHEDULER.DROP_JOB ( job_name => 'clean_customer_data_job', force => TRUE); END;
以上就是一個(gè)簡(jiǎn)單的Job的使用示例,通過(guò)Job可以實(shí)現(xiàn)各種定時(shí)任務(wù),提高數(shù)據(jù)庫(kù)的自動(dòng)化管理能力。
到此這篇關(guān)于Oracle中定時(shí)任務(wù)的使用(創(chuàng)建查看刪除等)的文章就介紹到這了,更多相關(guān)Oracle 定時(shí)任務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于sql腳本導(dǎo)入Oracle時(shí)重復(fù)生成check約束的問(wèn)題解決
這篇文章主要給大家介紹了關(guān)于sql腳本導(dǎo)入Oracle時(shí)重復(fù)生成check約束的問(wèn)題解決方法,文中給出了詳細(xì)的檢查步驟,對(duì)大家理解和解決這個(gè)問(wèn)題具有很好的幫助,需要的朋友們下面來(lái)一起看看吧。2017-05-05在Oracle的函數(shù)中,返回表類(lèi)型的語(yǔ)句
在SQL Server中有表變量,可以在function中方便地返回,習(xí)慣SQL Server或者需要把腳本從SQL Server轉(zhuǎn)到Oracle中的朋友可以都會(huì)碰到這個(gè)問(wèn)題2012-10-10從Oracle數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)自動(dòng)生成INSERT語(yǔ)句的方法
今天小編就為大家分享一篇關(guān)于從Oracle數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)自動(dòng)生成INSERT語(yǔ)句的方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-04-04Oracle中RegExp_Like正則表達(dá)式基本用法舉例
這篇文章主要給大家介紹了關(guān)于Oracle中RegExp_Like正則表達(dá)式基本用法的相關(guān)資料,REGEXP_LIKE(x,pattern)函數(shù)的功能類(lèi)似于like運(yùn)算符,用于判斷源字符串是否匹配或包含指定模式的子串,需要的朋友可以參考下2024-02-02Oracle?數(shù)據(jù)庫(kù)中的全文搜索整體流程分析
Oracle 是一種功能強(qiáng)大的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它提供了各種功能來(lái)處理和管理大量的數(shù)據(jù),這篇文章主要介紹了Oracle?數(shù)據(jù)庫(kù)中的全文搜索功能,需要的朋友可以參考下2024-04-04oracle 數(shù)據(jù)庫(kù)閃回相關(guān)語(yǔ)句介紹
本文將詳細(xì)介紹oracle 數(shù)據(jù)庫(kù)閃回相關(guān)語(yǔ)句,需要了解跟多的朋友可以參考下2012-11-11Oracle實(shí)現(xiàn)動(dòng)態(tài)SQL的拼裝要領(lǐng)
這篇文章主要介紹了Oracle實(shí)現(xiàn)動(dòng)態(tài)SQL的拼裝要領(lǐng),對(duì)于Oracle的進(jìn)一步學(xué)習(xí)來(lái)說(shuō)非常重要,需要的朋友可以參考下2014-07-07oracle中對(duì)JSON數(shù)據(jù)處理的詳細(xì)指南
很多人對(duì)JSON不陌生,JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式,下面這篇文章主要給大家介紹了關(guān)于oracle中對(duì)JSON數(shù)據(jù)處理的詳細(xì)指南,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05