当前位置: 首页 > news >正文

Oracle DBMS_SCHEDULER 与 DBMS_JOB 的对比

Oracle DBMS_SCHEDULER 与 DBMS_JOB 的对比

一 基本概述对比

特性DBMS_JOB (旧版)DBMS_SCHEDULER (新版)
引入版本Oracle 7 (1992年)Oracle 10g R1 (2003年)
当前状态已过时但仍支持推荐使用的标准
设计目的基础作业调度企业级作业调度系统

二 功能特性对比

2.1 作业定义能力

  • DBMS_JOB:

    • 仅支持PL/SQL代码片段
    • 无正式作业名称,只有数字ID
    BEGINDBMS_JOB.SUBMIT(job => :jobno,what => 'BEGIN my_proc; END;',next_date => SYSDATE,interval => 'SYSDATE+1');
    END;
    
  • DBMS_SCHEDULER:

    • 支持命名作业
    • 可执行PL/SQL块、存储过程、外部程序等
    • 支持作业链、作业类等高级概念
    BEGINDBMS_SCHEDULER.CREATE_JOB(job_name => 'MY_JOB',job_type => 'PLSQL_BLOCK',job_action => 'BEGIN my_proc; END;',start_date => SYSDATE,repeat_interval => 'FREQ=DAILY',enabled => TRUE);
    END;
    

2.2 调度灵活性

  • DBMS_JOB:

    • 简单日期表达式
    • 仅支持基于日期的间隔
    interval => 'SYSDATE+1/24' -- 每小时执行
    
  • DBMS_SCHEDULER:

    • 使用日历表达式
    • 支持复杂调度规则
    repeat_interval => 'FREQ=HOURLY; BYMINUTE=0,15,30,45'
    

2.3 资源管理

  • DBMS_JOB:

    • 无内置资源控制
    • 无法限制作业资源使用
  • DBMS_SCHEDULER:

    • 支持作业优先级
    • 可分配资源计划
    • 可限制CPU使用等
    DBMS_SCHEDULER.SET_ATTRIBUTE('MY_JOB','max_run_duration',INTERVAL '30' MINUTE
    );
    

三 管理维护对比

3.1 监控能力

  • DBMS_JOB:

    • 有限的视图(DBA_JOBS, DBA_JOBS_RUNNING)
    • 无历史执行记录
  • DBMS_SCHEDULER:

    • 丰富的视图(DBA_SCHEDULER_JOBS等)
    • 完整的执行历史记录
    SELECT * FROM DBA_SCHEDULER_JOB_RUN_DETAILS
    WHERE job_name = 'MY_JOB';
    

3.2 错误处理

  • DBMS_JOB:

    • 简单重试机制
    • 失败16次后自动标记为broken
  • DBMS_SCHEDULER:

    • 可配置重试策略
    • 支持失败通知
    • 可定义失败后的处理程序
    DBMS_SCHEDULER.SET_ATTRIBUTE('MY_JOB','max_failures',5
    );
    

四 性能与扩展性对比

维度DBMS_JOBDBMS_SCHEDULER
并发作业数有限(依赖JOB_QUEUE_PROCESSES)更高性能,更好的扩展性
依赖管理无内置支持支持作业依赖和作业链
多租户支持不明确12c+完整支持PDB/CDB

五 实际应用建议

  1. 新项目开发:一律使用DBMS_SCHEDULER

  2. 旧系统维护

    • 简单作业可保持使用DBMS_JOB
    • 复杂需求应迁移到DBMS_SCHEDULER
  3. 迁移路径

    -- 使用DBMS_SCHEDULER.CREATE_JOB创建新作业
    -- 使用DBMS_JOB.REMOVE逐步淘汰旧作业
    
  4. 混合环境注意事项

    • 两种系统独立运行
    • 共享JOB_QUEUE_PROCESSES参数
    • 监控时需同时检查两种作业

六 典型场景选择指南

  1. 适合DBMS_JOB的场景

    • 简单的定时PL/SQL执行
    • 需要向后兼容的旧系统
    • 轻量级调度需求
  2. 必须使用DBMS_SCHEDULER的场景

    • 需要复杂调度规则
    • 需要执行操作系统命令或程序
    • 需要作业依赖和资源控制
    • 需要详细的作业历史记录
    • 在多租户环境中使用

七 版本兼容性说明

  1. Oracle 10g-11g

    • 两种系统共存
    • 建议开始迁移到DBMS_SCHEDULER
  2. Oracle 12c+

    • DBMS_JOB仍然可用但不推荐
    • DBMS_SCHEDULER功能更丰富
  3. Oracle 19c/21c

    • DBMS_JOB保持兼容性
    • 新功能只加入DBMS_SCHEDULER

更详细的内容请查看官方文档:

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/arpls/DBMS_JOB.html#GUID-8C62D808-D7A3-4D21-B87F-A229B7CE1956

谨记:心存敬畏,行有所止。

相关文章:

  • 【音视频开发】第五章 FFmpeg基础
  • k8s调度器:如何控制Pod的分布
  • 【Android】 如何将 APK 内置为系统应用(适用于编辑设置属性)
  • vim编辑器
  • Android Compose Activity 页面跳转动画详解
  • 更换 CentOS 7.9 的系统源
  • 智能交响:EtherCAT转Profinet网关开启汽车自动化通信新纪元
  • Linux电源管理(三),CPUIdle 和 ARM的PSCI
  • VFlash的自动化和自定义动作
  • 深入理解Qt状态机的应用
  • C++23 新特性:std::size_t 字面量后缀 Z/z
  • B3634 最大公约数和最小公倍数
  • InfiniBand与RoCEv2负载均衡机制的技术梳理与优化实践
  • AWS中国区服务部署与ICP备案全流程指南:从0到1实现合规上线
  • Python爬虫实战:基于 Scrapy 框架的微博数据爬取研究
  • 给你的 Rust 通用库“插上” WebAssembly 的翅膀
  • 批量给文件创建一个同名的文件夹,并将文件放入对应同名的文件夹
  • 第9篇:Linux程序访问控制FPGA端HEX<二>
  • 常用UI设计工具及平台概览
  • Mac配置Java的环境变量
  • 辽宁援疆前指总指挥王敬华已任新疆塔城地委副书记
  • 特朗普政府涉税改法案遭众议院预算委员会否决
  • “一百零一个愿望——汉字艺术展”亮相意大利威尼斯
  • 盛和资源海外找稀土矿提速:拟超7亿元收购匹克,加快推动坦桑尼亚项目
  • 菲律宾中期选举初步结果出炉,杜特尔特家族多人赢得地方选举
  • 台行政机构网站删除“汉人”改为“其余人口”,国台办回应