首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从表空间恢复逻辑空间

从表空间恢复逻辑空间
EN

Database Administration用户
提问于 2012-03-21 14:46:06
回答 2查看 3.1K关注 0票数 11

我有一个名为DATA的表空间,它是用自动扩展为false设置的.这个表空间有两个数据文件并被设置,因此它占用了350 GB的物理空间。

一周前,我询问了user_tablespaces和dba_data_files,发现它们有20%的可用逻辑空间。然后我进行了清理,并从这个表空间中的表中删除了许多记录。我们原以为可利用的空间会大幅度增加。不幸的是,当我询问视图时,我注意到可用空间现在是20.5%。

这可能是数据碎片造成的吗?我们能以某种方式“分解”表空间并恢复丢失的空间吗?还是我们需要从头开始重新创建表空间?

EN

回答 2

Database Administration用户

发布于 2012-03-21 15:45:06

当您删除记录时,没有什么可以自动压缩段,因此您需要进行段收缩才能恢复空间。以下是11.2管理员回收浪费空间指南的摘录:

随着时间的推移,对表空间中的对象的更新和删除可以创建一个小块的空空间,这些空间单独地不够大,不能用于新的数据。这种类型的空空间称为碎片空闲空间。具有碎片空闲空间的对象可能会导致大量空间浪费,并可能影响数据库性能。整理和回收此空间的首选方法是执行联机段收缩。这一过程巩固了高水位下零碎的自由空间,并压缩了部分空间。压实后,高水点被移动,在高水标上方产生新的自由空间。高水区上方的空间就会被取消。在大部分操作期间,该段仍然可用于查询和DML,不需要分配额外的磁盘空间。

再往下看,您可以在同一页阅读以下内容:

段收缩是一个在线的,就地操作.DML操作和查询可以在段收缩的数据移动阶段发出。当空间被取消时,并发DML操作在收缩操作结束时会被阻塞一小段时间。索引在收缩操作期间维护,并在操作完成后保持可用。段收缩不需要分配额外的磁盘空间。段收缩回收未使用的空间,无论在上面和下面的高水位标志。相反,空间的减少只会在高水位以上收回未使用的空间。在收缩操作中,默认情况下,数据库压缩段,调整高水标记,并释放回收的空间。

该页面包含了更多关于这个问题的信息,包括例子。

“概念指南”中的“分段空间与高水区标志”部分也可能有用。

票数 14
EN

Database Administration用户

发布于 2012-03-21 15:50:40

是的,这将是由于分裂。

要回收空间,首先使用以下查询在表空间中获取表列表(忽略分区-如果使用分区,请编辑您的问题):

代码语言:javascript
复制
select distinct table_name from dba_tables where tablespace_name = 'DATA';

然后,对每个表启用行移动:

代码语言:javascript
复制
alter table TABLEINDATAPARTITION enable row movement;

然后,您可以缩小表:

代码语言:javascript
复制
alter table TABLEINDATAPARTITION shrink space;

然后用以下方法缩小数据文件:

代码语言:javascript
复制
alter database datafile '/path/to/my/file/data01.dbf' resize 20480M;

数据文件名称可以从DBA_DATA_FILES视图中获得,您已经知道了。

票数 9
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/15348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档