暂无图片
暂无图片
3
暂无图片
暂无图片
1
暂无图片

oracle定时任务常用攻略

原创 virvle 4天前
203

最近的项目中用到定时任务,做了个小小笔记,分享给大家。

在 Oracle 19c 中,若想创建个定时任务,可以通过 DBMS_SCHEDULERDBMS_JOB 来创建定时任务,确保存储过程 pro_test 每天零点自动执行一次。

1. 创建作业

1.1.授权说明

-- 授权创建JOB权限 GRANT CREATE JOB TO <USER> -- 若要存储过程属于其他用户,需要授权 GRANT EXECUTE ON PRO_TEST TO <USER>;
复制

1.2.创建作业(Job)

BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => 'JOB_PRO_TEST_DAILY', -- 作业名称 job_type => 'STORED_PROCEDURE', -- 作业类型(存储过程) job_action => 'PRO_TEST', -- 存储过程名 start_date => SYSTIMESTAMP, -- 开始时间(立即生效) repeat_interval => 'FREQ=DAILY; BYHOUR=0; BYMINUTE=0; BYSECOND=0', -- 每天零点执行 enabled => TRUE, -- 启用作业 comments => 'Daily execution of PRO_TEST at midnight' ); END; /
复制

关键参数说明

  • repeat_interval
  • FREQ=DAILY:每天执行。
  • BYHOUR=0:在 0 点执行。
  • BYMINUTE=0BYSECOND=0:精确到 00:00:00。

1.3.手动执行进行测试

BEGIN DBMS_SCHEDULER.RUN_JOB('JOB_PRO_TEST_DAILY'); END; /
复制

2.查看 DBMS_SCHEDULER 作业的详细信息

2.1 查询 *_SCHEDULER_JOBS 视图

-- 查看当前用户下的作业 SELECT job_name, job_type, job_action, start_date, repeat_interval, enabled, state FROM USER_SCHEDULER_JOBS; -- 查看所有作业(需 DBA 权限) SELECT job_name, owner, job_type, job_action, start_date, repeat_interval, enabled, state FROM DBA_SCHEDULER_JOBS;
复制

2.2 查询 *_SCHEDULER_PROGRAMS(如果作业关联了程序)

SELECT program_name, program_type, program_action FROM USER_SCHEDULER_PROGRAMS;
复制

2.3 查询 *_SCHEDULER_JOB_ARGS(查看作业参数)

SELECT job_name, argument_name, argument_value FROM USER_SCHEDULER_JOB_ARGS WHERE job_name = 'JOB_PRO_TEST_DAILY';
复制

2.4 使用 DBMS_SCHEDULER.GET_ATTRIBUTE 获取作业属性

DECLARE v_repeat_interval VARCHAR2(1000); BEGIN DBMS_SCHEDULER.GET_ATTRIBUTE( name => 'JOB_PRO_TEST_DAILY', attribute => 'repeat_interval', value => v_repeat_interval ); DBMS_OUTPUT.PUT_LINE('Repeat Interval: ' || v_repeat_interval); END; /
复制

3.查看作业运行状况

-- 查看作业运行历史 SELECT job_name, status, log_date, run_duration FROM USER_SCHEDULER_JOB_RUN_DETAILS WHERE job_name = 'JOB_PRO_TEST_DAILY'; -- 查看作业错误日志 SELECT job_name, status, error#, error_msg FROM USER_SCHEDULER_JOB_RUN_DETAILS WHERE status = 'FAILED';
复制

4. 修改 DBMS_SCHEDULER 作业(如需)

4.1 使用 DBMS_SCHEDULER.SET_ATTRIBUTE 修改作业属性

-- 修改作业的执行时间(每天 1:00 执行) BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE( name => 'JOB_PRO_TEST_DAILY', attribute => 'repeat_interval', value => 'FREQ=DAILY; BYHOUR=1; BYMINUTE=0; BYSECOND=0' ); END; / -- 修改作业的存储过程(job_action) BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE( name => 'JOB_PRO_TEST_DAILY', attribute => 'job_action', value => 'pro_test_v2' -- 新的存储过程名 ); END; / -- 修改作业的启用状态 BEGIN DBMS_SCHEDULER.ENABLE('JOB_PRO_TEST_DAILY'); -- 启用 DBMS_SCHEDULER.DISABLE('JOB_PRO_TEST_DAILY'); -- 禁用 END; /
复制

4.2 使用 DBMS_SCHEDULER.COPY_JOB 复制并修改作业

-- 复制作业并修改 BEGIN DBMS_SCHEDULER.COPY_JOB( source_job => 'JOB_PRO_TEST_DAILY', destination_job => 'JOB_PRO_TEST_DAILY_V2' ); DBMS_SCHEDULER.SET_ATTRIBUTE( name => 'JOB_PRO_TEST_DAILY_V2', attribute => 'job_action', value => 'pro_test_v2' ); END; /
复制

4.3 删除并重新创建作业

-- 删除作业 BEGIN DBMS_SCHEDULER.DROP_JOB('JOB_PRO_TEST_DAILY'); END; / -- 重新创建作业 BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => 'JOB_PRO_TEST_DAILY', job_type => 'STORED_PROCEDURE', job_action => 'pro_test_v2', start_date => SYSTIMESTAMP, repeat_interval => 'FREQ=DAILY; BYHOUR=0; BYMINUTE=0; BYSECOND=0', enabled => TRUE ); END; /
复制

5.字典说明

操作 方法
查看作业定义 USER_SCHEDULER_JOBSDBMS_SCHEDULER.GET_ATTRIBUTE
修改作业属性 DBMS_SCHEDULER.SET_ATTRIBUTE
修改作业逻辑 复制作业(COPY_JOB)或删除后重新创建
查看执行日志 USER_SCHEDULER_JOB_RUN_DETAILS
最后修改时间:2025-03-26 10:04:08
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

淡定
暂无图片
1天前
评论
暂无图片 0
oracle定时任务常用攻略,,,,,学习了。。。。。。。。。。
1天前
暂无图片 点赞
评论
virvle
暂无图片
关注
暂无图片
获得了730次点赞
暂无图片
内容获得233次评论
暂无图片
获得了179次收藏
TA的专栏
目录
  • 1. 创建作业
    • 1.1.授权说明
    • 1.2.创建作业(Job)
    • 1.3.手动执行进行测试
  • 2.查看 DBMS_SCHEDULER 作业的详细信息
    • 2.1 查询 *_SCHEDULER_JOBS 视图
    • 2.2 查询 *_SCHEDULER_PROGRAMS(如果作业关联了程序)
    • 2.3 查询 *_SCHEDULER_JOB_ARGS(查看作业参数)
    • 2.4 使用 DBMS_SCHEDULER.GET_ATTRIBUTE 获取作业属性
    • 3.查看作业运行状况
  • 4. 修改 DBMS_SCHEDULER 作业(如需)
    • 4.1 使用 DBMS_SCHEDULER.SET_ATTRIBUTE 修改作业属性
    • 4.2 使用 DBMS_SCHEDULER.COPY_JOB 复制并修改作业
    • 4.3 删除并重新创建作业
    • 5.字典说明