清除表分区

上一篇我们讲了如何查看占用DB空间大的分区表,我们现在来讲空间进行删除用来节省数据库空间

1.查询表空间

/*查询表空间*/
SELECT SEGMENT_NAME,
       (SUM(BYTES) / 1024 / 1024 ) AS TABLE_SIZE_MB
  FROM USER_EXTENTS
 GROUP BY SEGMENT_NAME
 ORDER BY TABLE_SIZE_MB DESC;

发现SYS_LOB0000091343C00005$$空间占用很大

2.查询Lob空间所在的表

/*查找表结构信息*/
 SELECT * FROM DBA_LOBS WHERE SEGMENT_NAME = 'SYS_LOB0000091343C00005$$';

表:ET_MAIL_INFO的MAIL_BODY使用了BLOB从而占用了大量数据库空间

3. 查看表分区

4. 查询分区表的情况,生成清除指定某个分区表的分区数据的SQL,可以在USER_TAB_PARTITIONS中查询。

--查询分区表的PT01_CREATE_TIME情况,可以在USER_TAB_PARTITIONS中查询。
select 'truncate' as action,
       'alter table ' || t.table_name || ' truncate partition ' ||
       t.partition_name as Action_SQL
  from USER_TAB_PARTITIONS t
 where t.table_name = 'ET_MAIL_INFO'
   AND t.partition_name = 'PT01_CREATE_TIME'
union
select 'drop' as action,
       'alter table ' || t.table_name || ' drop partition ' ||
       t.partition_name as Action_SQL
  from USER_TAB_PARTITIONS t
 where t.table_name = 'ET_MAIL_INFO'
   AND t.partition_name = 'PT01_CREATE_TIME';

 5.清除表分区数据及占用空间

--清除表分区数据
alter table ET_MAIL_INFO truncate  partition PT01_CREATE_TIME;
--清除分区占用的空间:
alter table ET_MAIL_INFO drop partition PT01_CREATE_TIME;

6.删除数据及表空间后,必需要进行表分析,查看表相关索引等信息是否有效。

释放表空间后,表的行号rowid会发生变化,而基于rowid的索引则会变成无效。因此该操作后必须重建索引。
否则会 提示“ORA-01502: 索引'*********'或这类索引的分区处于不可用状态”

--分析表
analyze table ET_MAIL_INFO compute statistics;

 分析时发现表索引有问题,

 

7.查看表相关的索引

重建索引的方法当然可以先drop掉再create,也可以用rebuild(推荐使用,速度快且不会改变原来的索引结构)

--重建索引的方法当然可以先drop掉再create,也可以用rebuild(推荐使用,速度快且不会改变原来的索引结构)
alter index PK_ET_MAIL_INFO rebuild;
alter index IDX1_MAIL_INFO rebuild;
alter index IDX2_MAIL_INFO rebuild;
alter index IDX3_MAIL_INFO rebuild;

8,再次分析表后,发现索引正常,再次执行空间查询语句,发现空间变小了,只有352MB了

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值