在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
作業的例子:
interval引數值--如果表存在就刪除,然後建立乙個新錶
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;
/
這個過程的作用是用於刪除作業佇列當中的特定的作業,它的語法如下:
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...