使用dbms job包建立Oracle定時任務

2021-08-15 13:34:09 字數 3483 閱讀 6053

oracle的包裡面,有乙個名字叫做dbms_job的包,它的作用是安排和管理作業佇列。通過作業佇列,可以讓oracle資料庫定期執行特定的任務。當使用dbms_job管理作業的時候,必須確保設定了初始化引數job_queue_processes(不能為0)。

該過程用於建立乙個新的作業,當建立作業的時候,需要通過設定相應的引數來告訴oracle要執行的內容,要執行的時間,要執行任務的間隔。如下格式:

dbms_job.submit(

job out binary_interger,

what in varchar2,

next_date in

date

default sysdate,

interval in varchar2 default 『null』,

no_parse in

boolean

default

false,

instance in binary_integer default any_instance,

force in

boolean

default

false

);

建立oracle作業的例子:

--如果表存在就刪除,然後建立乙個新錶

drop

table testjob cascade

constraints;

create

table testjob(

id number

constraint testjob_id_pk primary

key,

name varchar2(30)

);--如果序列存在就刪除,然後建立乙個序列

drop sequence testjob_id_seq;

create sequence testjob_id_seq;

--建立乙個序列,每一次向表中插入一條資料,並且表中的id字段值使用序列指定

create

orreplace

procedure insert_job

isbegin

insert

into testjob values(testjob_id_seq.nextval,'test'||testjob_id_seq.currval);

commit;

end;

/declare

jobno binary_integer;

begin

--提交,操作的時間間隔設定為1分鐘

dbms_job.submit(jobno,'insert_job();',sysdate,'sysdate+1/(24*60)');

--列印序列號

dbms_output.put_line('jobno='||jobno);

--執行

dbms_job.run(jobno);

end;

/

interval引數值

這個過程的作用是用於刪除作業佇列當中的特定的作業,它的語法如下:

dbms_job.remove(job in binary_integer);
下面是乙個刪除作業的例子:

首先檢視dba_jobs表,看表裡面有哪些任務正在執行著?

select * from dba_jobs;
可以看到裡面的job就是我們要刪除的作業的編號,log_user是建立該任務的人。

sql> exec dbms_job.remove(467);

sql>commit;

這樣就能把已經建立的作業刪除了。

dbms_job.change(

job in binary_integer,

what in varchar2,

next_date,

interval in varchar2,

instance in binary_integer default

null,

force

inboolean

default false

);

例子:

sql>exec dbms_job.change(2,null,null,』sysdate+2』);

sql>commit;

what用來改變作業要執行的操作,例如:

sql>exec dbms_job.what(268,』getgx_ac01;』);
用來改變作業的下次執行日期

sql>exec dbms_job.next_date(『478』,』sysdate+2』);
該過程用來改變作業的執行時間間隔,下面的執行時間間隔修改為每分鐘執行一次:

sql>exec dbms_job.interval(478,』sysdate+1/24/60
該過程用於給該作業打上中斷標誌,可以在dba_jobs表裡面觀察該作業的broken標誌知否為中斷。例子:

sql>exec dbms_job.broken(478,true);

sql>commit;

該過程用來執行該作業,例子:

sql>exec dbms_rn(478);

sql>commit;

常見問題:

1、 如何停止乙個作業?

sql>dbms_jobs.broken(2,true);

sql>commit;

這裡務必要提交哈!

2、 如何啟動乙個作業?

sql>dbms_jobs.broken(2,false);

sql>commit;

這裡也務必要提交,否則就沒有效果

3、 前面提到的job_queue_processes在什麼地方設定?

alter  system  set  job_queue_processes=39 scope=spfile;
這個sql的執行是需要具備相應的許可權的。

4、 如何計算乙個過程執行的時間(date和timestamp)?

可以在過程的開始設定乙個時間,然後在過程的結尾處設定乙個時間,然後兩個時間的時間差可以計算出該過程執行的時間。通過實踐發現使用sysestamp來計算時間比較準確一些:

select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss:ff4') from dual;

DBMS Job包的用法

dbms job包的用法 包含以下子過程 broken 過程。change 過程。interval 過程。isubmit 過程。next date 過程。remove 過程。run 過程。submit 過程。user export 過程。what 過程。1 broken 過程更新乙個已提交的工作的狀...

Oracle基礎包之DBMS JOB 二

1 概述dbms job包包含isubmit submit remove change what next date instance interval broken run user export等過程。主要用於安排和管理作業佇列,通過使用作業,可以使oracle資料庫定期執行特定的任務,這個包屬...

Plsql建立Job報錯 ORA 06550

在plsql中寫了乙個儲存過程,並且測試通過,如下 create orreplace procedure p new jingqu visit gy h p day string,p hour string 定義引數 as v day varchar2 255 v hour varchar2 255...