19

DBMS_JOB 和 DBMS_SCHEDULER 有什么区别?

4

4 回答 4

22

来自其他论坛:

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

dbms_scheduler 比 dbms_job 更健壮、功能更全面,并且包含 dbms_job 不具备的以下功能:

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

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

  • 作业单元之间的依赖关系(10gR2 及更高版本)
  • 基于财务日历和财政季度的调度(10gR2 及更高版本)
  • 收到事件时运行的基于事件的作业(10gR2 及更高版本)
  • 在远程机器上运行作业(11gR1 及更高版本)
  • 有关感兴趣的工作事件的电子邮件通知(10gR2 及更高版本)
  • 根据文件的到达开始工作(10gR2 及更高版本)
于 2010-11-11T07:12:09.853 回答
17

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

有关更多信息,请参阅此 Ask Tom 线程

于 2010-11-11T10:49:35.680 回答
1

下面列出了 DBMS_SCHEDULER 相对于 cron 的一些好处:

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

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

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

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

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

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

下面列出了使用 cron 的一些优点:

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

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

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

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

于 2016-08-07T06:51:04.870 回答
1

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

随着升级到 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 – 升级期间 Oracle 19c 中的行为变化

于 2020-01-23T20:19:56.250 回答