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"

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

  --已经可以执行了。

时间: 2024-10-11 08:14:59

ORA-10618: Operation not allowed on this segment的相关文章

SQLExecption:Operation not allowed after ResultSet closed解决办法

原网址:http://blog.csdn.net/sku0923/article/details/1722370 一个stmt多个rs进行操作引起的ResultSet已经关闭错误 一个stmt多个rs进行操作. 那么从stmt得到的rs1,必须马上操作此rs1后,才能去得到另外的rs2,再对rs2操作. 不能互相交替使用,会引起rs已经关闭错误. 错误的代码如下:  stmt=conn.createStatement(); rs=stmt.executeQuery("select * from

db2报错 Operation not allowed for reason

1.DB2数据库表操作错误SQL0668N Operation not allowed for reason code "1" on table "XXXX". SQLSTATE=57016的解决方法 The table is in Check Pending state. The integrity of the table is not enforced and the content of the table may be invalid. An operat

java.sql.SQLException: Operation not allowed after ResultSet closed

转自:http://blog.csdn.net/hellobobantang/article/details/7173622 java.sql.SQLException: Operation not allowed after ResultSet closedat com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)at com.mysql.jdbc.SQLError.createSQLException(SQLError.

错误:Operation not allowed after ResultSet closed

?????????????????? 一.错误信息 Operation not allowed after ResultSet closed  意为:在结果集关闭不允许操作 二.为什么resultSet会自动关闭 错误关键在于:一个stmt有多个rs进行操作 正确操作应该:从stmt得到的rs1,必须马上操作此rs1后,才能去得到另外的rs2,再对rs2操作.不能互相交替使用:   或者   不用的rs,使用不同的stmt 错误的代码如下: stmt=conn.createStatement()

Operation not allowed on a unidirectional dataset错误?

关于网友提出的“ Operation not allowed on a unidirectional dataset错误?”问题疑问,本网通过在网上对“ Operation not allowed on a unidirectional dataset错误?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下: 问题: Operation not allowed on a unidirectional dataset错误?描述: 我在使用TSQLQuery组件查询Oracle数据库中的表

解决数据库Operation not allowed when innodb_forced_recovery > 0

请修改my.cnf innodb_force_recovery = 1 修改为 innodb_force_recovery = 0 在关闭时,参数innodb_fast_shutdown影响着表的存储引擎为InnoDB的行为. 该参数取值为0.1.2 0 代表党MySql关闭时,InnoDB需要完成所有的full purge 和 merge insert buffer操作,这会需要一些时间.1 代表不需要完成上述的full purge ,merge insert buffer操作,但是在缓冲池的

Operation not allowed after ResultSet closed

首先应该按照网上搜到的方法检查一下是否是一个statement对多个ResultSet进行操作. 比方说: Statement st = conn.CreateStatement(); ResultSet rs1 = st.executeQuery(); ResultSet rs2 = st.executeQuery(); 则必须先对rs1进行操作,然后再对rs2进行操作,不能交替操作.否则会引起rs已经关闭错误,因为执行第三条语句的时候,程序默认将rs2关闭,再对rs2进行操作的时候,就会发生

恢复数据块坏块

2014.7.22研究恢复数据库坏块: Oracle调用标准C的系统函数,对数据块进行读写操作,因此,坏块是有可能由以下几种原因产生: 硬件的I/O错误 操作系统的I/O错误或缓冲问题 内存或paging问题 磁盘修复工具 一个数据文件的一部分正在被覆盖 Oracle试图访问一个未被格式化的系统块失败 数据文件部分溢出 Oracle或者操作系统的bug 遇到"ORA-01578:ORACLE data block corrupted"错误 处理方法:1.rman的recover命令可以

Oracle 11g trace events

oracle的events,是我们在做自己的软件系统时可以借鉴的 Oracle 11g trace eventsORA-10001: control file crash event1ORA-10002: control file crash event2ORA-10003: control file crash event3ORA-10004: block recovery testing - internal errorORA-10005: trace latch operations fo