【问题标题】:DBMS_JOB vs DBMS_SCHEDULERDBMS_JOB 与 DBMS_SCHEDULER
【发布时间】:2020-01-24 04:19:56
【问题描述】:

DBMS_JOB 和 DBMS_SCHEDULER 有什么区别?

【问题讨论】:

    标签: oracle scheduler job-scheduling dbms-scheduler dbms-job


    【解决方案1】:

    来自其他论坛:

    虽然 dbms_job 在 10g 和 11g 中仍然存在,但 Oracle 建议在 10g 及更高版本中使用 dbms_scheduler。 dbms_job 没有添加任何新功能,您可能很快就会遇到它的限制。

    dbms_scheduler 比 dbms_job 更健壮、功能更全面,并包含以下 dbms_job 所没有的特性:

    • 作业运行记录(作业历史记录)
    • 简单但强大的调度语法(类似于但比 cron 语法更强大)
    • 在操作系统的数据库之外运行作业
    • 不同类别作业之间的资源管理
    • 使用作业参数,包括将对象传递到存储过程中
    • 基于权限的作业安全模型
    • 作业中的作业和 cmets 的命名
    • 存储的、可重复使用的计划

    10g 第 1 版之后的版本中的功能包括:

    • 作业单元之间的依赖关系(10gR2 及更高版本)
    • 基于财务日历和财务季度(10gR2 及更高版本)的计划
    • 在收到事件时运行的基于事件的作业(10gR2 及更高版本)
    • 在远程机器上运行作业(11gR1 及更高版本)
    • 有关感兴趣的工作事件的电子邮件通知(10gR2 及更高版本)
    • 根据文件的到达启动作业(10gR2 及更高版本)

    【讨论】:

      【解决方案2】:

      需要注意的一个区别是,与 DBMS_JOB 不同,DBMS_SCHEDULER 执行提交,这使得它不适合某些用途。对于更简单的要求,它也相当麻烦。虽然 DBMS_JOB 将不再增强,但它不太可能被取消支持,因为必须有成千上万的系统在使用它并依赖于它的工作方式,包括不执行调用它的事务的隐式提交。

      请参阅this Ask Tom thread 了解更多信息。

      【讨论】:

        【解决方案3】:

        接下来列出的是 DBMS_SCHEDULER 相对于 cron 的一些好处:

        • 可以使一个作业的执行依赖于另一个作业的完成

        • 强大的资源平衡和灵活的调度功能

        • 可以基于数据库事件运行作业

        • 无论操作系统如何,DBMS_SCHEDULER 语法的工作方式都相同

        • 可以使用数据字典运行状态报告

        • 如果工作在集群环境中,无需担心为集群中的每个节点同步多个 cron 表

        接下来列出的是使用 cron 的一些优点:

        • 易于使用、简单、久经考验

        • 几乎在所有 Linux/Unix 机器上普遍可用;在大多数情况下,无论 Linux/Unix 平台如何,运行几乎相同(是的,存在细微差别)

        • 与数据库无关;独立于数据库运行,无论数据库供应商或数据库版本如何,工作方式都相同

        • 无论数据库是否可用都有效

        【讨论】:

          【解决方案4】:

          我知道这是一个旧线程,但这似乎是相关的。

          随着升级到 Oracle Database 19c,将在旧 DBMS_JOB 接口的底层转换作业。不用担心 - 放松!

          会发生什么?这对您在 DBA_JOBS 中的工作意味着什么?

          首先,您不能阻止或跳过调度程序控制下的迁移。但也没有理由这样做。

          During the 19c upgrade for each job in DBMS_JOB a corresponding entry will be created with DBMS_SCHEDULER
          The old DBMS_JOB interface still works. But using it will always create a corresponding entry in the scheduler
          The check in preupgrade.jar is only checking for inconsistencies or any issues
          

          这意味着:您仍然可以使用 DBMS_JOB,但实际上我们使用的是 DBMS_SCHEDULER。内部程序已更改。您的调用将以相同的方式工作,但 DBMS_JOB 现在是 DBMS_SCHEDULER 的旧接口。

          见:DBMS_JOB – Behavior Change in Oracle 19c during upgrade

          【讨论】:

            猜你喜欢
            • 2021-10-21
            • 2015-01-19
            • 2014-07-04
            • 1970-01-01
            • 1970-01-01
            • 2022-11-23
            • 2013-11-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多