DBMS_JOB 和 DBMS_SCHEDULER 有什么区别?
4 回答
来自其他论坛:
尽管 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 及更高版本)
要注意的一个区别是,与 DBMS_JOB 不同,DBMS_SCHEDULER 执行提交,这使得它不适合某些用途。对于更简单的要求,它也相当麻烦。虽然 DBMS_JOB 将不再增强,但它不太可能被取消支持,因为必须有成千上万的系统在使用它并依赖于它的工作方式,包括不执行调用它的事务的隐式提交。
有关更多信息,请参阅此 Ask Tom 线程。
下面列出了 DBMS_SCHEDULER 相对于 cron 的一些好处:
• 可以使一个作业的执行依赖于另一个作业的完成
• 强大的资源平衡和灵活的调度功能
• 可以基于数据库事件运行作业
• 无论操作系统如何,DBMS_SCHEDULER 语法的工作方式都相同
• 可以使用数据字典运行状态报告
• 如果工作在集群环境中,无需担心集群中每个节点同步多个 cron 表
下面列出了使用 cron 的一些优点:
• 易于使用、简单、久经考验且真实
• 几乎在所有Linux/Unix 机器上普遍可用;在大多数情况下,无论 Linux/Unix 平台如何,运行几乎相同(是的,存在细微差别)
• 与数据库无关;无论数据库供应商或数据库版本如何,都独立于数据库运行并且工作方式相同
• 无论数据库是否可用都有效
我知道这是一个旧线程,但这似乎是相关的。
随着升级到 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 的旧接口。