--39.scheduler_job(一种新的JOB类型)
1.提交scheduler_job(同一个job_name不能重复提交,不区分大小写)(start_date的参数比当前数据库时间小的话,scheduler_job不会立马执行!!!,JOB就会)
样例:
begin
dbms_scheduler.create_job (
job_name => 'j_p_test_1110',
job_type => 'STORED_PROCEDURE',
job_action => 'p_test_1110',
start_date => sysdate,
repeat_interval => 'FREQ=DAILY;INTERVAL=1',
enabled => true
);
commit;
end;
-----------------------------------------------------------------------------------------------
job_name : 必选, 任务名称
job_type : 必选, 任务类型(
PLSQL_BLOCK, -- 执行一个PL/SQL匿名快
STORED_PROCEDURE, -- 执行一个存储过程
EXECUTABLE, -- 执行一个外部程序
CHAIN -- 执行一个CHAIN
)
job_action : 必选, 任务内容, 与job_type配合使用
start_date : 可选, 首次执行时间, 为空时表示立即执行
repeat_interval : 可选, 执行频率, 为空时表示只执行一次(
FREQ=MINUTELY; -- 表示间隔单位, 可选值有YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, SECONDLY
INTERVAL=1 -- 表示间隔周期
)
enabled : 可选, 是否启用任务
-----------------------------------------------------------------------------------------------
2.开启scheduler_job(scheduler_job运行时运行报错,必须要杀掉进程才能执行)(如果START_DATE小于当前数据库时间,开启scheduler_job后不会立即执行)
BEGIN
dbms_scheduler.enable('j_p_test_1110');
Commit;
END;
3.关闭scheduler_job(scheduler_job运行时运行报错,必须要杀掉进程才能执行)
BEGIN
dbms_scheduler.disable('j_p_test_1110');
Commit;
END;
4.查看已创建的scheduler_job
select * from dba_scheduler_jobs;
5.查看scheduler_job运行日志(只有当进程结束后才有日志产生)
select log_id, log_date, status from dba_scheduler_job_run_details where lower(job_name)='j_p_test_1110';
6.删除scheduler_job
begin
dbms_scheduler.drop_job ('j_p_test_1110');
commit;
end;
7.根据运行的scheduler_job查询进程号ID
SELECT S.SID, S.SERIAL#
FROM GV$SESSION S
WHERE S.STATUS = 'ACTIVE'
AND S.ACTION = 'J_P_TEST_1110';
参考案例:Oracle定时任务dbms_scheduler
https://blog.csdn.net/WuLex/article/details/81868928