GRANT CREATE JOB 仅允许用户在自身schema中创建作业,但无法启用/禁用/删除他人作业、创建program/schedule/chain、查询DBA_SCHEDULER_JOBS或调用DBMS_SCHEDULER.ENABLE等操作;这些必须显式授予MANAGE SCHEDULER系统权限。
必须显式授予 manage scheduler 系统权限,仅靠 create job 或角色(如 connect、resource)无法创建或管理调度作业。
为什么 GRANT CREATE JOB 不够用
Oracle 10g 起已弃用旧式 DBMS_JOB,转而使用基于数据字典的 Scheduler(DBMS_SCHEDULER)。此时 CREATE JOB 权限仅允许用户在自己的 schema 下创建作业,但无法:
• 修改/启用/禁用/删除他人作业
• 创建 program、schedule、chain 等 Scheduler 对象
• 查看全局作业状态(如 DBA_SCHEDULER_JOBS)
• 执行 DBMS_SCHEDULER.ENABLE 或 SET_ATTRIBUTE 等关键操作
这些都需要更高阶的系统级控制权 —— 即 MANAGE SCHEDULER。
MANAGE SCHEDULER 是系统权限,不是角色
它不能通过 GRANT dba_scheduler_role TO user 替代(该角色在 12c+ 已被废弃,且默认不包含实际调度控制权)。正确做法是直接授予权限:
• 以 SYS 或具备 ADMIN OPTION 的管理员身份执行:
GRANT MANAGE SCHEDULER TO <username>;
• 若需让用户也能把该权限转授他人(极少见,慎用),加
WITH ADMIN OPTION• 注意:该权限作用于整个数据库,不限定 schema;授予后,用户即可管理自己创建的所有 Scheduler 对象,也可查询
USER_SCHEDULER_* 视图常见报错与对应修复
遇到以下错误时,基本可判定缺 MANAGE SCHEDULER:
• ORA-27486: insufficient privileges —— 尝试 ENABLE、DISABLE、DROP_JOB 时触发
• ORA-27475: "xxx" must be a job —— 实际是权限不足导致对象解析失败,非语法错误
• PLS-00201: identifier 'DBMS_SCHEDULER.ENABLE' must be declared —— 并非包不存在,而是当前用户无权调用其过程(权限未生效)
修复只需一行:
GRANT MANAGE SCHEDULER TO teach;(替换
teach 为实际用户名)无需重启会话,权限立即生效
别忘了配套权限和配额
光有 MANAGE SCHEDULER 还不够,用户仍可能因其他缺失失败:
• CREATE SESSION:否则连不上库,根本走不到调度逻辑
• UNLIMITED TABLESPACE 或具体表空间配额:Scheduler 元数据写入 SYSAUX,若用户在 SYSAUX 无配额,CREATE JOB 会报 ORA-01950
• 若作业要执行存储过程,还需对目标过程有 EXECUTE 对象权限
典型最小集:
GRANT CREATE SESSION, UNLIMITED TABLESPACE, MANAGE SCHEDULER TO teach;


















