ORA-10618: Operation not allowed on this segment 执行存储过程权限需声明
执行SHOW_SPACE存储过程时只能在DBA角色下成功,在NORMAL角色用户下报错:
ORA-10618: Operation not allowed on this segment
ORA-06512: at "SYS.DBMS_SPACE", line 167
ORA-06512: at "DMS.SHOW_SPACE", line 65
ORA-06512: at line 2
遇到ORA -error 第一件要做的事情就是查看 "error message"
ORA-10618: Operation not allowed on this segment
Cause: This DBMS_SPACE operation is not permitted on segments in tablespaces with
AUTO SEGMENT SPACE MANAGEMENT
Action: Recheck the segment name and type and re-issue the statement
意思就是说 dbms_space这个包只能在非自动段空间管理的表空间上用.
查查 dba_tablespaces.
Not quite correct. That particular operation, or procedure/function, is
only permitted on non-ASSM tablespace. But some other procedures, such
as spce_usage, is used on ASSM.
终于找到毛病了,原来是没有权限。虽然当前用户执行语句是有权限的,但是放到存储过程中就必须要显式的赋个权限给当前用户。以下是我找到的资料,贴出来给大家也看一下吧。
=====================
【IT168 技术文档】我们知道,用户拥有的role权限在存储过程是不可用的。如:
SQL>
select
*
from
dba_role_privs
where
grantee=
'SUK'
;
GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE
------------ ------------ ------------ ------------
SUK DBA
NO
YES
SUK
CONNECT
NO
YES
SUK RESOURCE
NO
YES
--用户SUK拥有DBA这个role
--再创建一个测试存储过程:
create
or
replace
procedure
p_create_table
is
begin
Execute
Immediate
'create table create_table(id int)'
;
end
p_create_table;
--然后测试
SQL>
exec
p_create_table;
begin
p_create_table;
end
;
ORA-01031: 权限不足
ORA-06512: 在
"SUK.P_CREATE_TABLE"
, line 3
ORA-06512: 在line 1
--可以看到,即使拥有DBA role,也不能创建表。role在存储过程中不可用。
--遇到这种情况,我们一般需要显式进行系统权限,如grant create table to suk;
--但这种方法太麻烦,有时候可能需要进行非常多的授权才能执行存储过程
--实际上,oracle给我们提供了在存储过程中使用role权限的方法:
--修改存储过程,加入Authid Current_User时存储过程可以使用role权限。
create
or
replace
procedure
p_create_table
Authid
Current_User
is
begin
Execute
Immediate
'create table create_table(id int)'
;
end
p_create_table;
--再尝试执行:
SQL>
exec
p_create_table;
PL/SQL
procedure
successfully completed
--已经可以执行了。
ORA-10618: Operation not allowed on this segment
ORA-06512: 在 "SYS.DBMS_SPACE", line 152
ORA-06512: 在 "SYS.SHOW_SPACE", line 21
ORA-06512: 在 line 1
发现这是由于表空间的ASSM方式引起的。
要能够执行该脚本,则需要在手动段空间管理模式下。
创建一个MSSM表空间:
SQL>
create tablespace mantbs datafile 'E:\oracle\oradata\lyon\mantbs01.dbf'
size 10m uniform. size 1m segment space management manual;
表空间已创建。
将用户在mantbs上的空间配额修改为不限制:
SQL> alter user lyon quota unlimited on mantbs;
用户已更改。
将表移动到该表空间下:
SQL> alter table bigcol move tablespace mantbs
2 /
表已更改。
SQL> call show_space('BIGCOL',user);
调用完成。
SQL> show message;
SP2-0158: 未知的 SHOW 选项 "message"
SQL> set serveroutput on;
SQL> /
Free Blocks.............................0
Total Blocks............................128
Total Bytes.............................1048576
Unused Blocks...........................127
Unused Bytes............................1040384
Last Used Ext FileId....................23
Last Used Ext BlockId...................137
Last Used Block.........................1
调用完成。
即可查看该表占用空间情况。
最新文章
- Google Developing for Android 一 - 相关上下文介绍
- 文件类型工具类:FileTypeUtil
- 整理 iOS 9 适配中出现的坑(图文)(转)
- 数组作为hash元素的时候如何push
- MyEclipse使用手册(详细版)
- 【Convert Sorted Array to Binary Search Tree】cpp
- php include include_once require require_once 的区别与联系
- 单线程与多线程的简单示例(以Windows服务发短信为示例)
- asp.net 如何改变GridView搜索出来关键字的颜色?就像百度似的,我获得的是一个集合,改变集合中关键字的集合
- Cocos2d-x 2.3.3版本 FlappyBird
- maven源码打包
- 面对AI
- AspectJ(AOP)切面获取参数名称和参数
- Winform 学生管理系统增删改查
- Oracle 除数为0的处理(decode)
- 20155308 《网络攻防》 Exp3 免杀原理与实践
- [HDU4348]To the moon(主席树+标记永久化)
- 【jsp】配置错误页面
- Failed to resolve: 之一
- jquery获取input file的文件名,具有兼容性
热门文章
- CC2530低功耗设置(针对终端设备)
- CentOS7.1下生产环境Keepalived+Nginx配置
- VS2010安装顽疾解决方法:error 25541 failed to open xml file
- bzoj1085 骑士精神
- Spring IOC - 控制反转(依赖注入) - 入门案例 - 获取对象的方式 - 别名标签
- R语言学习——欧拉计划(1)Multiples of 3 and 5
- 使用shell/bat脚本调试java程序示例
- JavaScript方法和技巧大全
- Maven web项目启动出错
- Win7关机时弹出对话框,提示你想要的信息