Oracle里删除Job并不是用 DROP ANY JOB,而是通过 DBMS_SCHEDULER.DROP_JOB 这个包过程来完成的,你不需要那个系统权限。
删除Job的标准写法:
sql
BEGIN DBMS_SCHEDULER.DROP_JOB('job_name'); END; /
关键点:
- 用对包 :Scheduler Job 用
DBMS_SCHEDULER.DROP_JOB;如果是老的DBMS_JOB方式创建的,用DBMS_JOB.REMOVE(job_id)。 - 权限要求 :你只能删自己 schema 下的 Job,想删别人的需要
CREATE ANY JOB权限,而不是DROP ANY JOB。 - force 参数 :Job 正在运行时,加
force => TRUE可以强制删除。 - 删除后提交 :如果是
DBMS_JOB.REMOVE,记得执行COMMIT,否则会话关闭后删除会失效。
先用
SELECT * FROM USER_SCHEDULER_JOBS;确认 Job 名称再删,避免删错。
Select * From Session_Privs Where Privilege Like '%SCHEDULE%' Or Privilege
Like '%JOB%';

ORA-27486: insufficient privileges
ORA-06512: at "SYS.DBMS_ISCHED", line 278
ORA-06512: at "SYS.DBMS_SCHEDULER", line 751
ORA-06512: at line 2
View program sources of error stack?