DBMS_JOB包介绍
DBMS_JOB程序包主要是调度和管理作业队列中的作业。换句话说,其实就是用来管理定时任务的程序包。
Oracle推荐使用DBMS_SCHEDULER包来替代DBMS_JOB包。
DBMS_JOB包中的存储过程使用
DBMS_JOB程序包中主要有以下存储过程:
- BROKEN
- CHANGE
- INSTANCE
- INTERVAL
- NEXT_DATE
- REMOVE
- RUN
- SUBMIT
- USER_EXPORT
- WHAT
接下来具体说明这些存储过程的使用。
BROKEN
broken存储过程永久的禁用job的执行,就类似于冻结这个job。禁用之后,数据库中还会保留它,但即使满足条件也不会再调用。
语法:
DBMS_JOB.BROKEN (
job IN BINARY_INTEGER,
broken IN BOOLEAN,
next_date IN DATE DEFAULT SYSDATE);
参数说明:
- job 定时任务的标识符ID。
- broken 设置定时任务是否禁用。设置为true表示禁用,false表示启用。
- next_date 定时任务的下一次运行时间。
示例:
begin
dbms_job.broken(204,true);
commit;
end;
CHANGE
change存储过程用于更改现有job的参数。
语法:
DBMS_JOB.CHANGE (
job IN BINARY_INTEGER,
what IN VARCHAR2,
next_date IN DATE,
interval IN VARCHAR2,
instance IN BINARY_INTEGER DEFAULT NULL,
force IN BOOLEAN DEFAULT FALSE);
参数说明:
- job 定时任务的标识符ID。
- what 要运行的PL/SQL存储过程。
- next_date job下一次要运行的时间。
- interval job运行的时间间隔。
- instance 执行job的实例;默认值为null,表示当前实例(当前参数不做任何改变)。
- force 实例是否验证。如果为true,则指定的实例必须正在运行,否则,该存储过程会报错;如果为false(默认值),则任何正整数都可以作为job实例。(包括null)
示例:
begin
dbms_job.change(210,null,null,'sysdate+30/86400',1,true);
commit;
end;
INSTANCE
instance存储过程更改现有job的运行实例。
语法:
DBMS_JOB.INSTANCE (
job IN BINARY_INTEGER,
instance IN BINARY_INTEGER,
force IN BOOLEAN DEFAULT FALSE);
参数说明:
- job 定时任务的标识符ID。
- instance 执行job的实例;默认值为null,表示当前实例(当前参数不做任何改变)。
- force 实例是否验证。如果为true,则指定的实例必须正在运行,否则,该存储过程会报错;如果为false(默认值),则任何正整数都可以作为job实例。(包括null)。
示例:
begin
dbms_job.instance(210,1,false);
commit;
end;
INTERVAL
interval存储过程更改现有job的运行间隔。
如果interval参数值为null,则该job在下一次成功执行后自动从队列中删除。(自动删除该job)
语法:
DBMS_JOB.INTERVAL (
job IN BINARY_INTEGER,
interval IN VARCHAR2);
参数说明:
- job 定时任务的标识符ID。
- interval job运行的时间间隔。(interval参数必须计算为将来的某个时间。)
示例:
begin
dbms_job.interval(211,null);
commit;
end;
NEXT_DATE
next_date存储过程更改现有job下一次运行的时间。
语法:
DBMS_JOB.NEXT_DATE (
job IN BINARY_INTEGER,
next_date IN DATE);
参数说明:
- job 定时任务的标识符ID。
- next_date 下一次执行的时间。
示例:
begin
dbms_job.next_date(211,sysdate+1);
commit;
end;
REMOVE
remove存储过程移除现在的job。
需要注意,正在执行的job不会被删除。
语法:
DBMS_JOB.REMOVE (
job IN BINARY_INTEGER );
参数说明:
- job 定时任务的标识符ID。
示例:
begin
dbms_job.next_date(211,sysdate+1);
commit;
end;
RUN
run存储过程立即执行现有job。
需要注意,即使BROKEN设置为true,该job也会运行。
语法:
DBMS_JOB.RUN (
job IN BINARY_INTEGER,
force IN BOOLEAN DEFAULT FALSE);
参数说明:
- job 定时任务的标识符ID。
- force 如果为true,则当前实例不需要和job中指定的实例一致。如果为false,则当前实例必须与job指定的实例一致才能够运行。
示例:
begin
dbms_job.run(213,false);
commit;
end;
SUBMIT
submit存储过程创建一个job。
语法:
DBMS_JOB.SUBMIT (
job OUT BINARY_INTEGER,
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);
参数说明:
- job 定时任务的标识符ID。
- what 要运行的PL/SQL存储过程或代码块。
- next_date job下一次要运行的时间。
- interval job运行的时间间隔。
- no_parse 如果设置为false(默认值),则Oracle解析job中的存储过程。如果设置为true,则Oracle在第一次运行时解析job中的存储过程。
- instance 执行job的实例;默认值为null,表示当前实例(当前参数不做任何改变)。
- force 实例是否验证。如果为true,则指定的实例必须正在运行,否则,该存储过程会报错;如果为false(默认值),则任何正整数都可以作为job实例。(包括null)
示例:
declare
WATER_JOB number;
begin
dbms_job.submit(
job=>WATER_JOB,
what=>'test_aa;',
next_date=>sysdate,
interval => 'sysdate+10/86400');
commit;
end;
USER_EXPORT
user_export存储过程导出job的文本。(导出job的语句)
语法:
DBMS_JOB.USER_EXPORT (
job IN BINARY_INTEGER,
mycall IN OUT VARCHAR2,
myinst IN OUT VARCHAR2);
参数说明:
- job 定时任务的标识符ID。
- mycall 生成重新创建的job的文本。
- myinst 生成更改实例的job调用文本。
示例:
declare
jobcall varchar2(3000);
myinst varchar2(3000);
begin
dbms_job.user_export(223,jobcall,myinst);
dbms_output.put_line(jobcall);
dbms_output.put_line(myinst);
commit;
end;
WHAT
what存储过程更改现有job调用的存储过程。
语法:
DBMS_JOB.WHAT (
job IN BINARY_INTEGER,
what IN VARCHAR2);
参数说明:
- job 定时任务的标识符ID。
- what 要运行的PL/SQL存储过程。
示例:
begin
dbms_job.what(223,'sdsdf;');
commit;
end;
标签:BINARY,DBMS,存储,JOB,job,实例,Oracle
From: https://blog.51cto.com/bxbdba/6905562