缺MANAGE SCHEDULER权限时,即使已授CREATE JOB,调用DBMS_SCHEDULER.ENABLE或查询DBA_SCHEDULER_JOBS仍报错,因CREATE JOB仅允许在自身schema创建作业,而启用、禁用、删除作业及创建program/schedule/chain等必须显式授予MANAGE SCHEDULER系统权限。

缺 MANAGE SCHEDULER 权限时,哪怕 CREATE JOB 已授,调用 DBMS_SCHEDULER.ENABLE 或查 DBA_SCHEDULER_JOBS 仍会报错 —— 这是权限模型设计使然,不是配置遗漏。
为什么 GRANT CREATE JOB 不足以启用/删除/管理作业
Oracle 10g 起调度器已全面转向 DBMS_SCHEDULER,CREATE JOB 仅允许用户在自己 schema 下创建作业,但以下操作必须依赖更高阶权限:
-
DBMS_SCHEDULER.ENABLE、.DISABLE、.DROP_JOB等过程调用会直接触发ORA-27486: insufficient privileges - 创建
program、schedule、chain等依赖对象时报ORA-27475(实际是权限不足,非对象不存在) -
PLS-00201: identifier 'DBMS_SCHEDULER.ENABLE' must be declared并非包未安装,而是当前用户无权解析该过程 - 查询
DBA_SCHEDULER_JOBS或设置全局属性(如DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE)均失败
MANAGE SCHEDULER 是系统权限,不能靠角色替代
它不是角色,也不是 SCHEDULER_ADMIN 或 DBA 角色的隐含组成部分(尤其 12c+ 中 DBA_SCHEDULER_ROLE 已废弃且默认不含调度控制权)。必须由 SYS 或具备 ADMIN OPTION 的管理员显式授予:
- 执行:
GRANT MANAGE SCHEDULER TO <username>; - 若需转授权(极少见),加
WITH ADMIN OPTION;但不建议在生产环境启用 - 权限立即生效,无需重连会话或重启数据库
- 该权限作用于整个数据库,不限定 schema —— 授予后用户可管理自身创建的所有 Scheduler 对象,并自动拥有
SELECT权限访问USER_SCHEDULER_*视图
哪些操作仍需额外权限?
MANAGE SCHEDULER 解决了绝大多数管理动作,但以下场景需单独确认:
- 若
CREATE_JOB未授,仍无法调用DBMS_SCHEDULER.CREATE_JOB—— 必须同时授CREATE JOB - 若作业指定
job_style => 'REGULAR'且owner非当前用户,还需ALTER ANY JOB - 若作业调用外部程序(如
EXECUTABLE类型),需CREATE EXTERNAL JOB和对应目录对象的READ/WRITE权限 -
DBMS_SCHEDULER包本身不依赖EXECUTE权限 —— Oracle 内部机制绕过该检查,但权限缺失会导致过程不可见(即PLS-00201)
真正容易被忽略的是:权限必须直接授予用户,不能通过角色间接获得;且 MANAGE SCHEDULER 和 CREATE JOB 是两套独立权限,缺一不可。别信“我有 DBA 角色就足够”——那是旧版逻辑,现在行不通。


















