Oracle Database/Scheduler

Oracle Database/Scheduler

傻逼 Oracle 支持计划任务(job),可以定时执行存储过程等

使用傻逼 Oracle 内置的 dbms_scheduler 表空间 (table space)里的存储过程 CREATE_JOB, DROP_JOB, RUN_JOB 等来管理 jobs.

Create a job

(PL / SQL 调用 DBMS_SCHEDULER.create_job 存储过程)

begin
  DBMS_SCHEDULER.create_job (
    job_name        => 'test_job',
    job_type        => 'PLSQL_BLOCK',
    job_action      => 'TESTP;', -- procedure name
    start_date      => SYSTIMESTAMP,
    --number_of_arguments  => 2,
    enabled         => TRUE,
    repeat_interval => 'freq=HOURLY');
end;
  • freq 取值: "YEARLY" | "MONTHLY" | "WEEKLY" | "DAILY" | "HOURLY" | "MINUTELY" | "SECONDLY" 等。

Job Procedure In parameters

如果定时器调用的存储过程需要(指定)传入参数,需要在 create_job 时,传入 number_of_arguments 指定所需参数个数,

然后用 set_job_anydata_value 修改某个特定参数值。

dbms_scheduler.set_job_anydata_value 
(
  job_name => v_job_name,
  argument_position => 1, -- start from 1
  argument_value => xxx
); 

List Jobs

(System views)

select * from ALL_SCHEDULER_JOBS -- 当前用户有权访问的 jobs
select * from DBA_SCHEDULER_JOBS -- 整个 db 所有 jobs
select * from USER_SCHEDULER_JOBS -- 当前用户所拥有的 jobs,这个 view 没有 "OWNER" 字段

View Fields:

  • ENABLED: TRUE|FALSE

Drop Job

The following statement drops jobs job1 and job3, and all jobs in job classes jobclass1 and jobclass2:

BEGIN
  DBMS_SCHEDULER.DROP_JOB ('job1, job3, sys.jobclass1, sys.jobclass2');
END;

View scheduler logs

select * from ALL_SCHEDULER_JOB_RUN_DETAILS
select * from DBA_SCHEDULER_JOB_RUN_DETAILS
select * from USER_SCHEDULER_JOB_RUN_DETAILS

Last update: 2018-04-18 01:32:07 UTC