DBA_JOBS_RUNNING

本文通过一次意外的Job调度现象,详细解释了Oracle数据库中DBA_JOBS_RUNNING视图的功能及JOB_QUEUE_PROCESSES参数的意义。揭示了DBA_JOBS_RUNNING显示的是当前实例运行的Job数量,而非全库数量,并指出在双机环境中每个实例均可独立运行指定数量的Job。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天一大早无聊查一下DBA_JOBS_RUNNING发现从昨天开始就一直跑10个job,再在v$parameters中查了一下job_queue_processes参数设置的是10,也是就说oracle允许并行的job数量是10个。我想测试一下,就再启动了一个job,发现也能跑起来,这我就纳闷了,莫非是我理解错误,于是赶快去查了下帮助文档,是这样说的:

DBA_JOBS_RUNNING lists all jobs that are currently running in the instance.

JOB_QUEUE_PROCESSES specifies the maximum number of processes that can be created for the execution of jobs. It specifies the number of job queue processes per instance

原来DBA_JOBS_RUNNING查出来的是当前实例上运行的job数量,并不是整个数据库上job的数量,数据库是双机的,也就是说每个实例可以运行10个job,一共就是可以同时跑20个job。。。。。。DBA_JOBS_RUNNING与一般的数据字典视图还有点不一样,其他字典视图都是查的全库的情况,这个有点像动态性能视图,还与实例相关。。。。看来是我多虑了

<think>我们正在查询DBA_SCHEDULER_JOBS相关的表结构和信息。DBA_SCHEDULER_JOBS是Oracle数据库中的一个数据字典视图,它提供了数据库中所有调度作业的信息。这个视图包含了作业的各种属性,如作业名称、作业类型、启停状态、调度安排等。 在Oracle中,数据字典视图通常基于系统表创建,而DBA_SCHEDULER_JOBS视图的具体实现是Oracle内部管理的,但我们可以通过查询该视图的列来了解其结构。 我们可以通过以下方式获取DBA_SCHEDULER_JOBS的列信息: 1. 使用DESCRIBE命令(在SQL*Plus或SQL Developer中): ```sql DESCRIBE DBA_SCHEDULER_JOBS; ``` 2. 通过查询Oracle数据字典视图`ALL_TAB_COLUMNS`(或`DBA_TAB_COLUMNS`): ```sql SELECT column_name, data_type, data_length, nullable FROM dba_tab_columns WHERE table_name = 'DBA_SCHEDULER_JOBS'; ``` 但是,由于不同版本的Oracle可能会有细微的差别,以下列出的是Oracle 19c中DBA_SCHEDULER_JOBS视图的常见列(基于公开文档)[^1]: ### DBA_SCHEDULER_JOBS 主要列说明 | 列名 | 数据类型 | 描述 | |--------------------------|-------------------|----------------------------------------------------------------------| | OWNER | VARCHAR2(128) | 作业的所有者 | | JOB_NAME | VARCHAR2(128) | 作业名称 | | JOB_SUBNAME | VARCHAR2(128) | 作业子名称(用于链作业) | | JOB_STYLE | VARCHAR2(7) | 作业类型('REGULAR'或'LIGHTWEIGHT') | | JOB_CREATOR | VARCHAR2(128) | 作业创建者 | | CLIENT_ID | VARCHAR2(64) | 创建作业的客户端标识 | | GLOBAL_UID | VARCHAR2(32) | 全局唯一标识符 | | PROGRAM_OWNER | VARCHAR2(128) | 关联程序的所有者(如果作业基于程序) | | PROGRAM_NAME | VARCHAR2(128) | 关联程序的名称 | | JOB_TYPE | VARCHAR2(16) | 作业类型('PLSQL_BLOCK','STORED_PROCEDURE','EXECUTABLE','CHAIN'等) | | JOB_ACTION | VARCHAR2(4000) | 作业执行的动作(如PL/SQL块、存储过程名、可执行文件名等) | | NUMBER_OF_ARGUMENTS | NUMBER | 作业的参数个数 | | SCHEDULE_OWNER | VARCHAR2(128) | 调度计划的所有者(如果使用命名调度) | | SCHEDULE_NAME | VARCHAR2(128) | 调度计划的名称 | | SCHEDULE_TYPE | VARCHAR2(19) | 调度类型('IMMEDIATE','ONCE','RECURRING') | | START_DATE | TIMESTAMP(6) | 作业第一次执行的日期 | | REPEAT_INTERVAL | VARCHAR2(4000) | 重复间隔(如'FREQ=DAILY; BYHOUR=10') | | EVENT_QUEUE_OWNER | VARCHAR2(128) | 事件队列的所有者(事件驱动的作业) | | EVENT_QUEUE_NAME | VARCHAR2(128) | 事件队列的名称 | | EVENT_QUEUE_AGENT | VARCHAR2(128) | 事件队列代理(仅用于事件驱动的作业) | | EVENT_CONDITION | VARCHAR2(4000) | 事件条件(事件驱动的作业) | | EVENT_RULE | CLOB | 事件规则(事件驱动的作业) | | END_DATE | TIMESTAMP(6) | 作业的结束日期 | | JOB_CLASS | VARCHAR2(128) | 作业所属的类 | | ENABLED | VARCHAR2(5) | 是否启用('TRUE'或'FALSE') | | AUTO_DROP | VARCHAR2(5) | 作业完成后是否自动删除(引用[1]中提到的参数) | | RESTARTABLE | VARCHAR2(5) | 作业失败后是否可重启 | | STATE | VARCHAR2(15) | 作业当前状态('SCHEDULED','RUNNING','COMPLETED','FAILED'等) | | JOB_PRIORITY | NUMBER | 作业优先级 | | RUN_COUNT | NUMBER | 作业已运行的次数 | | MAX_RUN_DURATION | INTERVAL DAY(2) TO SECOND(6) | 作业最大运行时长(超过则被停止) | | MAX_FAILURES | NUMBER | 最大失败次数(超过则自动禁用作业) | | FAILURES | NUMBER | 当前失败次数 | | RETRY_COUNT | NUMBER | 重试次数(当前未成功运行的重试次数) | | LAST_START_DATE | TIMESTAMP(6) | 上次开始运行的时间 | | LAST_RUN_DURATION | INTERVAL DAY(2) TO SECOND(6) | 上次运行持续时间 | | NEXT_RUN_DATE | TIMESTAMP(6) | 下次运行时间 | | SCHEDULE_LIMIT | INTERVAL DAY(2) TO SECOND(6) | 调度时间窗口(允许作业启动的时间范围) | | MAX_RUNS | NUMBER | 最大运行次数(达到后作业自动禁用) | | LOGGING_LEVEL | VARCHAR2(9) | 日志记录级别('OFF','RUNS','FULL') | | STOP_ON_WINDOW_CLOSE | VARCHAR2(5) | 当调度窗口关闭时是否停止作业 | | INSTANCE_STICKINESS | VARCHAR2(5) | 是否粘附特定实例(RAC环境) | | RAISE_EVENTS | VARCHAR2(2000) | 作业触发的事件 | | SYSTEM | VARCHAR2(3) | 是否为系统作业 | | JOB_WEIGHT | NUMBER | 作业权重(用于资源分配) | | NLS_ENV | VARCHAR2(4000) | 作业的NLS环境设置 | | SOURCE | VARCHAR2(128) | 作业来源(如'DBMS_SCHEDULER') | | NUMBER_OF_DESTINATIONS | NUMBER | 目标数量(用于远程作业) | | ...(可能还有其他列) | ... | ... | 注意:实际列可能因Oracle版本不同而有所增减。 ### 示例查询 查询所有启用的作业及其调度信息: ```sql SELECT owner, job_name, enabled, state, next_run_date, repeat_interval FROM dba_scheduler_jobs WHERE enabled = 'TRUE'; ``` ### 注意事项 1. 需要DBA权限才能访问`DBA_SCHEDULER_JOBS`视图,普通用户可查看`USER_SCHEDULER_JOBS`。 2. 作业状态(`STATE`)是监控作业健康的关键指标。 3. `AUTO_DROP`属性决定作业完成后是否自动删除(引用[1]中提到的参数)。 §§相关问题§§ 1. 如何创建DBMS_SCHEDULER作业? 2. 如何监控调度作业的运行历史? 3. 如何修改作业的调度时间?</think>### DBA_SCHEDULER_JOBS 视图结构详解 `DBA_SCHEDULER_JOBS` 是 Oracle 数据库中的关键数据字典视图,用于管理调度作业。以下是其完整表结构(基于 Oracle 19c)[^1]: | **列名** | **数据类型** | **描述** | |------------------------|---------------------|-------------------------------------------------------------------------| | `OWNER` | VARCHAR2(128) | 作业所有者 | | `JOB_NAME` | VARCHAR2(128) | 作业名称 | | `JOB_SUBNAME` | VARCHAR2(128) | 链作业的子作业名称 | | `JOB_STYLE` | VARCHAR2(7) | 作业类型('REGULAR'或'LIGHTWEIGHT'轻量作业) | | `JOB_CREATOR` | VARCHAR2(128) | 作业创建者 | | `CLIENT_ID` | VARCHAR2(64) | 创建作业的客户端标识 | | `GLOBAL_UID` | VARCHAR2(32) | 全局唯一标识符 | | `PROGRAM_OWNER` | VARCHAR2(128) | 关联程序的所有者 | | `PROGRAM_NAME` | VARCHAR2(128) | 关联的程序名称 | | `JOB_TYPE` | VARCHAR2(16) | 作业类型:<br>• `PLSQL_BLOCK`<br>• `STORED_PROCEDURE`<br>• `EXECUTABLE`<br>• `CHAIN` | | `JOB_ACTION` | VARCHAR2(4000) | 作业执行内容(如PL/SQL代码或存储过程名) | | `NUMBER_OF_ARGUMENTS` | NUMBER | 作业参数个数 | | `SCHEDULE_OWNER` | VARCHAR2(128) | 调度计划所有者 | | `SCHEDULE_NAME` | VARCHAR2(128) | 调度计划名称 | | `SCHEDULE_TYPE` | VARCHAR2(19) | 调度类型:<br>• `IMMEDIATE`<br>• `ONCE`<br>• `RECURRING` | | `START_DATE` | TIMESTAMP(6) | 作业首次启动时间 | | `REPEAT_INTERVAL` | VARCHAR2(4000) | 重复间隔表达式(如 `FREQ=DAILY;BYHOUR=10`) | | `EVENT_QUEUE_OWNER` | VARCHAR2(128) | 事件队列所有者(事件驱动作业) | | `EVENT_QUEUE_NAME` | VARCHAR2(128) | 事件队列名称 | | `EVENT_CONDITION` | VARCHAR2(4000) | 事件触发条件 | | `END_DATE` | TIMESTAMP(6) | 作业结束时间 | | `JOB_CLASS` | VARCHAR2(128) | 作业所属的类 | | `ENABLED` | VARCHAR2(5) | 是否启用('TRUE'/'FALSE') | | `AUTO_DROP` | VARCHAR2(5) | 完成后自动删除(引用[1]中提到的参数) | | `RESTARTABLE` | VARCHAR2(5) | 失败后是否可重启 | | `STATE` | VARCHAR2(15) | 当前状态:<br>• `SCHEDULED`<br>• `RUNNING`<br>• `COMPLETED`<br>• `FAILED` | | `JOB_PRIORITY` | NUMBER | 作业优先级(1-5) | | `RUN_COUNT` | NUMBER | 已执行次数 | | `MAX_RUNS` | NUMBER | 最大允许执行次数 | | `FAILURES` | NUMBER | 失败次数 | | `MAX_FAILURES` | NUMBER | 最大允许失败次数 | | `RETRY_COUNT` | NUMBER | 当前重试次数 | | `LAST_START_DATE` | TIMESTAMP(6) | 上次启动时间 | | `LAST_RUN_DURATION` | INTERVAL DAY(2) TO SECOND(6) | 上次执行时长 | | `NEXT_RUN_DATE` | TIMESTAMP(6) | 下次计划执行时间 | | `LOGGING_LEVEL` | VARCHAR2(9) | 日志级别:<br>• `OFF`<br>• `RUNS`<br>• `FULL` | | `STOP_ON_WINDOW_CLOSE` | VARCHAR2(5) | 窗口关闭时是否停止作业 | ### 关键字段说明 1. **`AUTO_DROP`** 当设为 `TRUE` 时,作业完成后或转为禁用状态时自动删除(引用[1]中提到的行为)。 2. **`REPEAT_INTERVAL`** 使用日历语法定义调度规则,例如: ```sql FREQ=DAILY; BYHOUR=10 -- 每天10点 FREQ=WEEKLY; BYDAY=MON,WED -- 每周一和三 ``` 3. **`STATE`** 监控作业健康状态的核心字段,`FAILED` 状态需特别关注[^2]。 ### 示例查询 ```sql -- 查看所有作业的调度信息 SELECT job_name, enabled, state, next_run_date, repeat_interval FROM dba_scheduler_jobs; -- 检查失败作业 SELECT job_name, failures, last_start_date FROM dba_scheduler_jobs WHERE state = 'FAILED'; ``` ### 注意事项 1. 需要 `SELECT_CATALOG_ROLE` 权限才能访问此视图 2. 轻量作业(`JOB_STYLE='LIGHTWEIGHT'`)消耗资源更少,适合高频任务 3. 作业历史记录需查询 `DBA_SCHEDULER_JOB_RUN_DETAILS`[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值