ORA-01031与存储过程和JOB
来源:互联网 发布:消逝的光芒修改数据 编辑:程序博客网 时间:2024/05/17 07:17
存储过程中创建表,视图、同义词、序列时经常会遇到ORA-01031: 权限不足的错误。
原因是因为从角色中获取的权限在存储过程中是不可用的。
有两种方法可以解决:
一、创建存储过程时在存储过程名后增加 Authid Current_User 如
create or replace procedure tt_senquence Authid Current_User is ...
二、显示授予该用户相关系统权限 如:
grant create table to &user_name;
grant create any synonym to &user_name;
grant create any view to &user_name;
两种方法各有利弊;
第一种方法不用显示授于各种系统权限,比较方便。
但如果在job中调用该存储过程则还会报ORA-01031: 权限不足的错误。
第二种方法:虽然麻烦,但可以解决job中调用存储过程的问题。
SQL> show user;
User is "report"
--report用户拥有DBA角色
SQL> select grantee, granted_role from dba_role_privs
2 where granted_role = 'DBA' AND GRANTEE='REPORT'
3 ;
GRANTEE GRANTED_ROLE
------------------------------ ------------------------------
REPORT DBA
--手工创建一个序列,证明该用户有权限创建序列
SQL> create sequence pro_sequence minvalue 1 maxvalue 2000 start with 1 increment by 1 cache 100;
Sequence created
--删除序列
SQL> drop sequence pro_sequence;
Sequence dropped
--用存储过程创建该序列
SQL> create or replace procedure tt_senquence is
2 begin
3 execute immediate('create sequence pro_sequence minvalue 1 maxvalue 2000 start with 1 increment by 1 cache 100 ');
4 end ;
5 /
Procedure created
--执行存储过程时报ORA-01031: 权限不足
SQL> exec tt_senquence;
begin tt_senquence; end;
ORA-01031: 权限不足
ORA-06512: 在 "REPORT.TT_SENQUENCE", line 3
ORA-06512: 在 line 1
-- 存储过程中加入 Authid Current_User后,可以成功创建序列。
-- 但不能在job中调用该存储过程。
SQL> create or replace procedure tt_senquence Authid Current_User is
2 begin
3 execute immediate('create sequence pro_sequence minvalue 1 maxvalue 2000 start with 1 increment by 1 cache 100 ');
4 end ;
5 /
Procedure created
SQL> exec tt_senquence;
PL/SQL procedure successfully completed
SQL> select pro_sequence.nextval from dual;
NEXTVAL
----------
1
--新建job,调用该过程
SQL> variable jobno number;
SQL> begin
2 sys.dbms_job.submit(job => :jobno,
3 what => 'tt_senquence;',
4 next_date => to_date('09-01-2010', 'dd-mm-yyyy'),
5 interval => 'TRUNC(sysdate)+0.2/24');
6 commit;
7 end;
8 /
PL/SQL procedure successfully completed
jobno
---------
28
PL/SQL procedure successfully completed
我们在alert_sid.log中可以看到下述信息:
ORA-12012: 自动执行作业 28 出错
ORA-01031: 权限不足
ORA-06512: 在 "REPORT.TT_SENQUENCE", line 3
ORA-06512: 在 line 1
- ORA-01031与存储过程和JOB
- mysql存储过程和job
- 简单存储过程与job实现
- 应用oracle job和存储过程
- oracle如何创建job和存储过程
- JOB定时执行存储过程和对JOB的管理
- 存储过程,job总结
- 执行oracle中的job报错:ORA-12011:无法执行作业1存储过程执行DDL语句提示ORA-01031错误:权限不足
- ORA-00604: 和ORA-01548: 编译存储过程
- Oracle数据库中JOB与存储过程的接合用法!
- 讲解Oracle中JOB与存储过程的接合用法
- ORACLE JOB和存储过程的相关查询
- oracle存储过程和定时JOB的编写
- Oracle存储过程和job在项目中的应用
- 调用存储过程报错 ORA-01031
- oracle job调存储过程!
- 建立Job执行存储过程
- orcale job 存储过程创建
- Problem:Syntax error, annotations are only available if source level is 1.5
- 标准Linux文件系统层次标准(Filesystem Hierarchy Standard,FHS)第二章
- AndroidMap开发--申请APIKey
- 关于不同的编译器使用过程中遇到的问题!
- 标准Linux文件系统层次标准(Filesystem Hierarchy Standard,FHS)第三章
- ORA-01031与存储过程和JOB
- error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用
- linux 中 怎么更改启动linux画面
- 关于DB2的JDBC驱动
- 标准Linux文件系统层次标准(Filesystem Hierarchy Standard,FHS)第四章
- 链表的实现
- PowerShell2.0之桌面计算机维护(三)设置屏幕保护程序
- 标准Linux文件系统层次标准(Filesystem Hierarchy Standard,FHS)第五章
- Bresenham线算法