表记录删除之后,表空间清理释放过程

以CMS的t_cms_send_content_log举例:

CMS_DATA表空间默认空闲:1015.0625
插入1W条数据之后,CMS_DATA空闲:1011.875,空间被占用:3.1875

1.采用delete操作删除表记录:
delete from t_cms_send_content_log;
commit;
delete之后,表空间占用大小无变化,数据未释放
空间无变化,CMS_DATA空闲:1011.875,空间仍然被占用:3.1875

2.采用truncate table 操作删除表记录:
Truncate table t_cms_send_content_log;
Truncate之后,表空间CMS_DATA 被释放,回复空闲到默认:1015.0625

3.进行表空间碎片整理
ALTER TABLESPACE CMS_DATA COALESCE;
ALTER TABLESPACE CMS_INDX COALESCE;
碎片整理之后,表空间占用没有变化

3.创建新的CMS_DATA_1、CMS_INDX_1表空间和原有表空间相同大小,将该表切换到新表空间,再切换回来。
(1)赋予CMS的dba操作权限:
(2)切换表所属空间,到新建表空间:
alter table t_cms_send_content_log move tablespace CMS_DATA_1;
执行:
select tablespace_name,sum(bytes)/1024/1024 from dba_free_space
group by tablespace_name
CMS_DATA 目前空闲:1014.875,3.0的空间被释放。
CMS_DATA_1 空闲:1023.9375

(3)恢复到原有表空间:
alter table t_cms_send_content_log move tablespace CMS_DATA;
CMS_DATA 目前空闲:1014.8125,约3.0的空间被释放。
CMS_DATA_1 空闲:1023.9375

(4)重建索引
查看unusable 状态的索引,
select * from user_indexes where status = 'UNUSABLE';
重建查询结果中的索引
Alter index 索引名称 rebuild
Alter index 索引名称 UNUSABLE --索引重置为不可用


结论:
1. 对无用日志表,全表删除记录时。建议采用truncate table进行操作。表空间可以得到即时释放。
2. 定期做表空间碎片整理
3. 通过切换表空间delete数据可以得到释放。


记录删除后,表空间依然没有释放,不能重用!
以下SQL命令可以释放删除后的空间:
truncate table tabname;
alter table tabname move tablespace tbsname;
alter index indname rebuild on tablespace tbsname;
或者exp后在imp


create table tnamenew as select * from tnameold;
truncate table tnameold;
insert into tnameold (select * from tnamenew);
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值