#定时任务
定时任务(JOB)是数据库里的一种PL对象。分布式部署中不能创建定时任务。
系统提供如下内置高级包用于创建和管理定时任务:
一个定时任务包含如下三个基本要素:
- JOB唯一标识
- JOB需要执行的任务
- JOB执行时间及频率
DBMS_JOB基于上述三个要素,提供一系列存储过程实现对一个JOB的直接操作管理。DBMS_SCHEDULER相比DBMS_JOB提供了更丰富和灵活的功能,如可设置任务名称,任务结束时间,结束后自动删除等。
在调用高级包执行创建或管理定时任务的各种操作后,用户可通过如下配置参数或系统视图监控定时任务的执行状况和各种属性:
JOB_QUEUE_PROCESSES
该配置参数用于指定后台运行JOB的线程数量,当JOB_QUEUE_PROCESSES=0时,系统中所有的JOB都不会被自动执行;当某一时间需要自动执行的JOB数量大于当前空闲的JOB线程数时,JOB需要排队等待 。
JOB/SCHEDULER视图
JOB视图:DBA_JOBS/ALL_JOBS/USER_JOBS。
SCHEDULER视图:DBA_SCHEDULER_JOBS/ALL_SCHEDULER_JOBS/USER_SCHEDULER_JOBS。
查看定时任务的各项属性,跟踪定时任务的执行情况,例如查看当前用户下处于调度中的任务队列(未被停止,或状态为有效且在有效期内):
示例(单机、共享集群部署)
SELECT job, next_date, failures
FROM USER_JOBS
WHERE broken='N';
JOB NEXT_DATE FAILURES
----- -------------------------------- ------------
1616 2022-06-22 22:44:33.000000 0
1617 2022-06-22 22:44:38.000000 0
1618 2022-06-21 22:55:06.000000 0
SELECT job_name,next_run_date,failure_count
FROM USER_SCHEDULER_JOBS
WHERE enabled=true
AND (START_DATE IS NULL OR SYSDATE>START_DATE)
AND (END_DATE IS NULL OR SYSDATE<END_DATE);
JOB_NAME NEXT_RUN_DATE FAILURE_COUNT
-------------------- -------------------------------- -------------
DBMS_JOB$_1616 2022-06-22 22:44:33.000000 0
DBMS_JOB$_1617 2022-06-22 22:44:38.000000 0
SCHE_EXAMPLE 2022-06-21 22:55:06.000000 0