由于分区表数据增加;没做清除操作;导致表空间告急。需要清理很久之前的数据;释放空间。步骤如下
一,查看哪个表占的空间
1 2 3 4 | SELECT t.segment_name, SUM (t.bytes / 1024 / 1024) FROM user_segments t GROUP BY t.segment_name ORDER BY SUM (t.bytes / 1024 / 1024) DESC |
二、查看每个子分区的记录
1 | SELECT a.table_name,a.partition_name FROM user_tab_partitions a WHERE a.table_name = 'TBL_SMSMT_AUTOACTIV_BILL_HIS' ; |
三、检查分区表的索引是否LOCAL类型
--先查看该表的索引
1 | SELECT * FROM User_Indexes a WHERE a.table_name = 'TBL_SMSMT_AUTOACTIV_BILL_HIS' ; |
--在查看索引是否为local类型;若不存在;则为全局索引
1 | select table_name,index_name,LOCALITY from user_part_indexes where table_name= 'TBL_SMSMT_AUTOACTIV_BILL_HIS' ; |
四、如果都是LOCAL索引,直接清除表分区数据(如果是全局索引,清除完成后需要重建)
本地索引在你删除子分区表的时候会跟着删除;不会影响。
1 2 3 4 5 6 7 8 9 | ALTER TABLE TBL_SMSMT_AUTOACTIV_BILL_HIS DROP PARTITION P201305; ALTER TABLE TBL_SMSMT_AUTOACTIV_BILL_HIS DROP PARTITION P201306; ALTER TABLE TBL_SMSMT_AUTOACTIV_BILL_HIS DROP PARTITION P201307; ALTER TABLE TBL_SMSMT_AUTOACTIV_BILL_HIS DROP PARTITION P201308; ALTER TABLE TBL_SMSMT_AUTOACTIV_BILL_HIS DROP PARTITION P201309; ALTER TABLE TBL_SMSMT_AUTOACTIV_BILL_HIS DROP PARTITION P201310; ALTER INDEX SYS_C00105590 REBUILD; ALTER INDEX I_TBL_SMSMT_AUTOACTIV_BILL_HIS REBUILD; --其中SYS_C00105590,I_TBL_SMSMT_AUTOACTIV_BILL_HIS是全局索引 |
五, 验证是否释放空间;(可忽略)
再执行第一步;