如何区分数据库中的DBMS_JOB与DBMS_SCHEDULER?求过滤DBMS_JOB的查询语句
区分DBMS_JOB与DBMS_SCHEDULER及过滤查询语句
两者的核心区分点
- 创建方式:DBMS_JOB是Oracle早期的作业调度工具,只能通过
DBMS_JOB.SUBMIT()存储过程创建;DBMS_SCHEDULER是后续推出的新版调度工具,依赖DBMS_SCHEDULER.CREATE_JOB()及相关过程创建。 - 数据存储视图:DBMS_JOB的作业信息集中在
DBA_JOBS、ALL_JOBS、USER_JOBS这几个视图里;DBMS_SCHEDULER的作业数据则存在DBA_SCHEDULER_JOBS、ALL_SCHEDULER_JOBS、USER_SCHEDULER_JOBS等以SCHEDULER开头的专属视图中。 - 功能范围:DBMS_SCHEDULER支持更复杂的调度规则(比如日历表达式、作业依赖、作业链),而DBMS_JOB仅支持简单的时间间隔调度,功能局限性明显。
- 作业标识:DBMS_JOB的作业ID是系统分配的数字;DBMS_SCHEDULER的作业名可自定义,也可由系统自动生成字符串型标识。
仅过滤DBMS_JOB的查询语句
DBMS_JOB的作业不会出现在DBMS_SCHEDULER的视图中,直接查询其专属视图即可:
- 查询当前用户的所有DBMS_JOB:
SELECT job AS 作业ID, what AS 执行内容, next_date AS 下次执行时间, interval AS 调度间隔, failures AS 失败次数 FROM USER_JOBS;
- 查询数据库中所有用户的DBMS_JOB(需要DBA权限):
SELECT job AS 作业ID, log_user AS 所属用户, what AS 执行内容, next_date AS 下次执行时间, interval AS 调度间隔 FROM DBA_JOBS;
内容的提问来源于stack exchange,提问作者chiranth
相关产品推荐
相关产品推荐

