4 oracle
我不是 DBA,但必须解决这个问题。
我的 Oracle 9i 数据库中有 2 个永久表空间。一个用于表,另一个用于临时和 UNDO 表空间以外的索引
上周我得到了例外
ORA-01654: 无法将
<name of the index>
表空间中的索引扩展128<name of the Index tablespace>
。
我的表空间大小大大增加。但我仍然收到此错误。
我删除了很多数据,认为这会释放一些空间。但这没有用。
缩小表空间或重新调整永久表空间的数据文件大小会解决此问题吗?
此外,自 3 月以来尚未收集统计数据。收集最新的统计数据对我有任何帮助吗?
删除数据不会有任何区别,因为 Oracle 将保留空间准备好重新填充。表中的顶部空间使用称为高水位线。Tom Kyte 有一篇关于它的精彩帖子。
您可以通过重建表来减少高水位线:
alter table my_table_name move;
Run Code Online (Sandbox Code Playgroud)
如果在增加表空间大小后仍然出现错误,可能有几个原因......
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 中您无法减小表空间的大小。要使用此选项,您必须重新创建表空间,但要更小一些,并将所有内容移至其中。