Oracle 数据库采用Job 实现定时任务
最近在工作中有这样一个需要,就是在特定的时间进行数据的备份以提高系统性能.
因此了解了关于在Oralce 数据中实现定时任务的方法:
1 .定义任务的实现 --- 如存储过程
2. 定义一个任务并启动
下面给出一个定义和启动任务的例子
create or replace procedure p_createWFBankJob
/****************************************************************************
Author : Crazy rain
Date : 07-01-17
Description :创建和运行进行工作流备份的Job
****************************************************************************/
is
--任务是否已被创建,若任务被创建过,则 isExist > 0
isExist number := 0;
--归档任务标识
jobId number;
begin
select count(*) into isExist from all_jobs j where j.what='p_bank_workflow;';
--检查任务是否已被创建,如果已被创建,则不做操作
if isExist = 0 then
--创建任务
dbms_job.submit(jobId, --任务标识
'p_bank_workflow;', --任务要执行的存储过程
sysdate, --任务开始时间
'next_day(trunc(sysdate),1)'); --任务执行周期,此处指定每周执行一次,执行时间为周末(星期天)
commit;
--运行任务
dbms_job.run(jobId);
commit;
end if;
end p_createWFBankJob;
上面的存储过程定义了一个在每周周末进行归档(数据备份)操作的Job,
我们需要注意的一个问题是,上边定义的任务调用的存储过程名称后面有一个分号,这个分号是不能少的
下面具体介绍一下Job的用法(注: 部分资料来源于互联网)
1、Broken()过程更新一个已提交的工作的状态,典型地是用来把一个已破工作标记为未破工作。
这个过程有三个参数:job 、broken与next_date。
PROCEDURE Broken (job IN binary_integer,
Broken IN boolean,
next_date IN date :=SYSDATE)