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

被折叠的 条评论
为什么被折叠?



