JOB
DBMS_JOB 包用于安排和管理作业队列。通过使用 job,可以使 oracle 数据库定期执行特定的任务。
当使用 DBMS_JOB 管理 job 时,必须确保设置了初始化参数 JOB_QUEUE_PROCESSES(不能为 0,最大值为 1000)。
alter system set job_queue_processes=n
查询用户作业
select * from user_jobs;
select * from dba_jobs;
查看 job queue 后台进程
select name, description from v$bgprocess;
SUBMIT
用于建立一个新作业。
DBMS_JOB.SUBMIT
(
job out number,
what in varchar2,
next_date in date default sysdate,
interval in varchar2 default 'null',
no_parse in boolean default false,
instance in number default any_instance,
force in boolean default false
);
job: 指定作业编号
what: 指定作业要执行的操作
next_date:指定作业的下次运行日期
interval: 指定运行作业的时间间隔
no_parse: 指定是否解析与作业相关的过程
instance: 指定哪个例程可以运行作业
force: 指定是否强制运行与作业相关的例程
例子:
创建测试表
create table t(a date);
创建一个自定义过程
create or replace procedure pro_testjob as
begin
insert into t values(sysdate);
end pro_testjob;
/
创建JOB
variable job1 number;
exec dbms_job.submit(:job1,'PRO_TESTJOB;',sysdate,'sysdate+1/1440');
variable job1 number;
begin
dbms_job.submit(:job1,'PRO_TESTJOB;',sysdate,'sysdate+1/1440');
end;
/
运行JOB
exec dbms_job.run(:job1);
begin
dbms_job.run(:job1);
end;
/
select to_char(a,'yyyy/mm/dd hh24:mi:ss') from t;
REMOVE
用于删除作业队列的特定作业。
DBMS_JOB.REMOVE( job in number );
例子:
exec dbms_job.remove(:job1);
begin
dbms_job.remove(:job1);
end;
/
CHANGE
用于改变作业相关的所有信息。包括:作业操作、运行日期和时间间隔等。
DBMS_JOB.CHANGE
(
job in number,
what in varchar2,
next_date in date,
interval in varchar2,
instance in number default null,
force in boolean default false
);
例子:
exec dbms_job.change(:job1,null,sysdate,'sysdate+1/720');
WHAT
用于改变作业要执行的操作。
DBMS_JOB.WHAT
(
job in number,
what in varchar2
)
job 参数标识一个存在的工作
what 参数指示将被执行的新的 PL/SQL 代码。
例子:
exec dbms_job.what(:job1, 'ACTION');
NEXT_DATE
用于改变作业的下次运行日期。
DBMS_JOB.NEXT_DATE
(
job in number,
next_date in date
);
例子:
exec dbms_job.next_date(':job1', 'sysdate+1/1440');
INSTANCE
用于改变运行作业的例程。
DBMS_JOB_INSTANCE
(
job in number,
instance in number,
force in boolean default false
);
例子:
exec dbms_job.instance(72, 1);
INTERVAL
用于改变作业的时间间隔。
DBMS_JOB.INTERVAL
(
job in number,
interval in varchar2
);
例子:
exec dbms_job.interval(72, 'sysdate+1/24/60');
BROKEN
用于设置作业的中断标记。当中断了作业之后,作业将不会被运行。
DBMS_JOB.BROKEN
(
job in number,
broken in boolean,
next_date in date default sysdate
);
broken 指定中断标记(true 表示中断);
例子:
exec dbms_job.broken(72, true);
RUN
用于运行以及存在的作业。
DBMS_JOB.RUN
(
job in number,
force in boolean default false
);
待补充:
USER_EXPORT
ISUBMIT