job prucedure ORA-01031: 权限不足 错误诊断

本文探讨了在Oracle数据库中存储过程与Job调度任务之间的权限问题。作者在尝试将存储过程放入Job执行时遇到了权限不足的错误,并通过分析发现这是由于存储过程中使用了需要系统权限的操作,而这些权限无法直接传递给Job。最终通过为用户显式授权解决了问题。

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

  做JAVA开发,想向DBA发展,一直学管理方面的东西,对存储过程一直以为都是编码,只是语法不同,今天做存储过程定制JOB的时候发现不是那么回事,看来还要好多要学呀!!!!!!!!

 

说明: procedure 本身可以执行.但是放到job中执行错误

ORA-12012: 自动执行作业 187 出错
ORA-01031: 权限不足
ORA-06512: 在"EMMA.PACK_SMS", line 16
ORA-06512: 在"EMMA.PACK_SMS", line 36


 

奇怪的就是proc本身能够执行,但是放到job中为什么不能执行了呢,查看proc ,发现里面存在 execute immediate create table ,

说明:在存储过程中使用的到系统权限不能通过rule来授权,需要显示授权,或者使用AUTHID CURRENT_USER

发现次存储过程使用了AUTHID CURRENT_USER ,所以存储过程能够执行.可是在job中就不能执行了.可知job是oracle后台进程启动的.这点就想不通了.

sql>grant create table to user_name;

之后就可以run job了.

这里可以利用10046 , 1031 trace name errorstack 来进行trace

sql>alter session set events '10046 trace name context forever , level 12';
sql>alter session set events '1031 trace name errorstack level 1';
DECLARE
BEGIN
dbms_job.run(187);
END;

/

查看trace ,发现

ksedmp: internal or fatal error
ORA-01031: 权限不足
Current SQL statement for this session:
create table s_tab as select * from stable

由此可知在job中必须显示授权.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值