当前位置: 首页 > 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

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

http://www.dtcms.com/a/138465.html

相关文章:

  • 【音视频开发】第五章 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的环境变量
  • 案例驱动的 IT 团队管理:创新与突破之路:第五章 创新管理:从机制设计到文化养成-5.2 技术决策民主化-5.2.2技术选型的量化评估矩阵
  • 4.15BUUCTF Ez_bypass,HardSQL,AreUSerialz,BabyUpload,CheckIn
  • GitLab-CI集成FTP自动发布
  • docker 启动mysql9认证失败
  • Postman实现接口测试(附项目实战)
  • kubesphere(一) Ubuntu 24 云服务器 单节点 kubekey 安装k8s和kubesphere
  • 碳排放因子库
  • 利用redis实现订单倒计结束后更改订单状态为已失效
  • 大数据调度组件
  • 怎么用面向对象和状态机架构,设计一个通用的按键检测功能?