欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Oracle中定時(shí)任務(wù)的使用(創(chuàng)建查看刪除等)

 更新時(shí)間:2024年02月05日 09:17:57   作者:樹(shù)賢森  
Oracle沒(méi)有內(nèi)置的定時(shí)任務(wù)功能,但可以使用Oracle的Job Scheduler來(lái)實(shí)現(xiàn)類(lèi)似的功能,本文主要介紹了Oracle中定時(shí)任務(wù)的使用,具有一定的參考價(jià)值,感興趣的可以了解一下

一、了解什么是定時(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)文章

最新評(píng)論