ORA-01654: 无法在表空间 <索引表空间名称> 中将索引 <索引名称> 扩展 128

4 oracle

我不是 DBA,但必须解决这个问题。

我的 Oracle 9i 数据库中有 2 个永久表空间。一个用于表,另一个用于临时和 UNDO 表空间以外的索引

上周我得到了例外

ORA-01654: 无法将<name of the index>表空间中的索引扩展128 <name of the Index tablespace>

我的表空间大小大大增加。但我仍然收到此错误。

我删除了很多数据,认为这会释放一些空间。但这没有用。

缩小表空间或重新调整永久表空间的数据文件大小会解决此问题吗?

此外,自 3 月以来尚未收集统计数据。收集最新的统计数据对我有任何帮助吗?

Ben*_*Ben 9

删除数据不会有任何区别,因为 Oracle 将保留空间准备好重新填充。表中的顶部空间使用称为高水位线。Tom Kyte 有一篇关于它的精彩帖子

您可以通过重建表来减少高水位线

alter table my_table_name move;
Run Code Online (Sandbox Code Playgroud)

如果在增加表空间大小后仍然出现错误,可能有几个原因......

  1. 即使对于新增加的表空间,索引也太大了。表有多大以及您正在编制索引的列的总大小是多少?
  2. 您在创建索引时没有指定表空间,也没有使用您认为的表空间,无论您的架构的默认表空间是什么。

1 to 的答案是添加更多空间。

要找出您的默认表空间:

select * from dba_users where username = 'MY_USER'
Run Code Online (Sandbox Code Playgroud)

如果这不是您的索引表空间,则必须在创建索引时指定它。

create index i_my_table 
    on my_table ( my_column ) 
       tablespace my_index_ts
       < other options >
Run Code Online (Sandbox Code Playgroud)

是的,如果您使用的是 9i,那么绝对值得收集统计信息,因为当对表进行了足够多的更改时,它不会自动收集它们 - 在更高版本中会这样做。使用DBMS_STATS.GATHER_TABLE_STATS()并且仅重建表执行此操作。

不幸的是,在 Oracle 中您无法减小表空间的大小。要使用此选项,您必须重新创建表空间,但要更小一些,并将所有内容移至其中。