truncate表后空间不释放问题

当/data空间不足,收到监控系统告警后,通过将表DCP_YSJ.T_TOOL_LOG及其索引从YSJ_D表空间迁移到YSJ_DBAK新表空间来解决问题。涉及步骤包括迁移表和索引,设置用户默认表空间,收集统计信息以及检查并重建UNUSABLE索引。
摘要由CSDN通过智能技术生成

前几天的事情,收到监控系统告警,某环境的/data空间不够了,其他同事处理后告诉我,把log表truncate后,表空间中的数据文件无法缩小。告警无法恢复。 该问题之前也遇到过,建议把该表空间的表迁移到新表空间可解决,需要注意点:需要多次查看索引是否有效,

被truncate表: DCP_YSJ.T_TOOL_LOG
原表空间YSJ_D   新表空间:YSJ_DBAK

1、将表和索引等全部迁移到新表空间中,下面语句得出执行sql,直接执行即可

select 'alter table '|| a.OWNER ||'.'||a.SEGMENT_NAME||' move tablespace YSJ_DBAK;' from dba_segments a where TABLESPACE_NAME='YSJ_D' and SEGMENT_TYPE='TABLE';


select 'alter index '|| a.OWNER ||'.'||a.SEGMENT_NAME||' rebuild tablespace YSJ_DBAK;' from dba_segments a where TABLESPACE_NAME='YSJ_D' and SEGMENT_TYPE='INDEX';


select 'alter table '|| l.OWNER ||'.'||l.table_name||' move lob('||l.column_name||') store as( tablespace YSJ_DBAK);' from dba_lobs l,dba_segments s where l.segment_name=s.segment_name and s.tablespace_name='YSJ_D';

2、设置用户使用新表空间
alter user DCP_YSJ default tablespace YSJ_DBAK;

3、收集整个用户下的所有对象统计信息
exec dbms_stats.gather_schema_stats('DCP_YSJ',options=>'gather stale',estimate_percent =>10);

4、查看原表空间和新表空间的对象
select SEGMENT_TYPE,OWNER,SEGMENT_NAME from dba_segments where TABLESPACE_NAME='YSJ_D';

select SEGMENT_TYPE,OWNER,SEGMENT_NAME from dba_segments where TABLESPACE_NAME='YSJ_DBAK';

5、查找UNUSABLE的索引重新新建
select 'alter index '|| OWNER ||'.'||index_name||' rebuild tablespace YSJ_DBAK;' from dba_indexes where owner = 'DCP_YSJ' and STATUS='UNUSABLE';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值