这里要注意的一点是,在 oracle 中删除用户不会从其表空间中释放空间。表空间占用自己的空间,它充当数据库用户的虚拟存储空间。因此,删除用户将在该表空间中创建空闲空间,然后该表空间的另一个用户可以使用该空间。
要检查所有表空间中的可用空闲空间,请使用以下查询:
select tot.tablespace_name, tot.file_name, tot.bytes/1024/1024 size_mb, free.free_mb
from dba_data_files tot, (select file_id, sum(bytes/1024/1024) free_mb FROM dba_free_space free group by file_id) free
where tot.file_id=free.file_id
order by free.free_mb;
为了重组一个表空间,你必须重组它的内容,即表和索引。重组需要将表空间中的空间增加一倍,因为它会将表和索引移动到新块中,但重组后,您可以通过调整表空间数据文件的大小来回收空间。
要移动表和索引,首先使用 dba_segments 视图确定哪些对象正在使用您的表空间,然后使用以下命令移动/重建这些对象:
alter table TABLENAME move;
alter index INDEXNAME rebuild online;