Oracle定时任务是在oracle系统中一个非常重要的子系统,运用得当,可以大大提高我们系统运行和维护能力。oracle定时任务的功能,可以在指定的时间点自行执行任务。
那么在实际工作中,什么样的场景会用到定时任务呢?下面是在实际工作中用到的真实业务场景举例
- variable jobno number;
- dbms_job.submit(:jobno, —-job号
- 'your_procedure;', —-执行的存储过程, ';'不能省略
- next_date, —-下次执行时间
- 'interval' —-每次间隔时间,
- interval 以天为单位);
-
上面是通过脚本创建,当然也可以通过plsql图形化工具来创建,具体创建过程如下
**系统会自动分配一个任务号jobno ** ,根据jobno 可以进行如下定时任务操作
- show parameter job_queue_process;
- 或者
- select * from v$parameter where name='job_queue_processes';
-
- alter system set job_queue_processes = 10;
-
- create table t_test (id varchar2(30),
- name varchar2(30)
- );
-
- create or replace procedure proce_t is
- begin
- insert into t_test
- (id, name)
- values
- ('1', to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'));
- commit;
- end proce_t;
- /
-
- variable jobno number;
- begin
- dbms_job.submit(:jobno,
- 'proce_t;',
- sysdate,
- 'sysdate+1/24/60');
- commit;
- end;
-
- select job, next_date, next_sec, failures, broken from user_jobs where job = '1424'
-
查询结果如下
- SQL> select job, next_date, next_sec, failures, broken from user_jobs where job = '1424'
- 2 /
-
- JOB NEXT_DATE NEXT_SEC FAILURES BROKEN
- ---------- ----------- ---------------- ---------- ------
- 1424 2020-12-30 13:07:14 0 N
-
其中broken = N 表示该job已经生效
我们再来查看目标表中有没有定时插入数据
- SQL> select * from t_test;
-
- ID NAME
- ------------------------------ ------------------------------
- 1 2020-12-30 13:05:14
- 1 2020-12-30 13:03:14
- 1 2020-12-30 13:04:14
- 1 2020-12-30 13:08:14
- 1 2020-12-30 13:06:14
- 1 2020-12-30 13:07:14
-
- 6 rows selected
-
可以看到,定时一分钟插入了一条数据。
1、根据jobno,执行以下脚本可以停止job
- SQL> begin
- 2 dbms_job.broken(1424, true, sysdate);
- 3 commit;
- 4 end;
- 5 /
-
- PL/SQL procedure successfully completed
-
再来查看定时任务是否停用成功
- SQL> select job, next_date, next_sec, failures, broken from user_jobs where job = '1424';
-
- JOB NEXT_DATE NEXT_SEC FAILURES BROKEN
- ---------- ----------- ---------------- ---------- ------
- 1424 4000-01-01 00:00:00 0 Y
-
我们发现BROKEN=Y 说明定时任务已经停止成功了
- SQL> begin
- 2 dbms_job.run(1424);
- 3 commit;
- 4 end;
- 5 /
-
- PL/SQL procedure successfully completed
-
- SQL> select job, next_date, next_sec, failures, broken from user_jobs where job = '1424';
-
- JOB NEXT_DATE NEXT_SEC FAILURES BROKEN
- ---------- ----------- ---------------- ---------- ------
- 1424 2020-12-30 13:20:53 0 N
-
BROKEN = N ,刚才的定时任务又启动了
下面总计了一些定时任务中常用的运行时间