必须授予MANAGE SCHEDULER系统权限才能启用、禁用或删除作业;仅CREATE JOB权限不足,且该权限不可通过角色继承或DBA_SCHEDULER_ROLE替代。

只给 CREATE JOB 权限,用户根本调不动 DBMS_SCHEDULER.ENABLE 或删别人作业——必须显式授予 MANAGE SCHEDULER 系统权限。
ORA-27486 / ORA-27475 报错时,基本就是缺 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 一次 create job”能解决的。直接执行:
GRANT MANAGE SCHEDULER TO <username>;</username>
权限立即生效,不用重连会话。
MANAGE SCHEDULER 是系统权限,不是角色,也不能靠 CONNECT 或 RESOURCE 替代
它和 CREATE JOB 有本质区别:
• CREATE JOB 只允许在自己 schema 下建作业,但不能启用、修改、删除他人作业,也不能查 DBA_SCHEDULER_JOBS
• MANAGE SCHEDULER 是数据库级系统权限,授完后用户可管理所有自己创建的 Scheduler 对象(program/schedule/chain/job),也能查 USER_SCHEDULER_* 视图
• 它不能通过 GRANT dba_scheduler_role TO user 补救——该角色在 12c+ 已废弃,且默认不带实际调度控制权
• 也不受角色继承影响:DBMS_SCHEDULER 忽略通过角色授予的对象权限,所有关键操作都要求直接授权
光有 MANAGE SCHEDULER 还不够,配套权限和配额得一起配
常见“授了权还是跑不了”的原因往往在这几处:
• 缺 CREATE SESSION:用户连不上库,根本走不到调度逻辑
• 没表空间配额:UNLIMITED TABLESPACE 或明确给 DEFAULT TABLESPACE 配额,否则 Scheduler 元数据写入 SYS 时会失败
• 调用存储过程时缺 EXECUTE 权限:如果 job_action 指向其他 schema 的过程,比如 HR.PROC_SYNC_DATA,还得额外执行
GRANT EXECUTE ON HR.PROC_SYNC_DATA TO <username>;</username>
• 操作系统级作业(job_type => 'EXECUTABLE')还需 CREATE CREDENTIAL 和对应凭证,且 Oracle 用户需有 OS 层执行权限
真正容易被忽略的是:权限生效不等于功能可用——MANAGE SCHEDULER 授予后,用户能调 ENABLE,但如果作业依赖的存储过程本身执行失败(比如权限不足、表不存在、配额满),错误仍会出现在 DBA_SCHEDULER_JOB_LOG 里,而不是初始授权环节。查问题得顺着日志往下游看,别卡在“我已经 grant 了”。











