ORACLE--分区表数据清理


由于分区表数据增加;没做清除操作;导致表空间告急。需要清理很久之前的数据;释放空间。步骤如下

一,查看哪个表占的空间

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

二、查看每个子分区的记录

SELECT a.table_name,a.partition_name FROM user_tab_partitions  a WHERE a.table_name = 'TBL_SMSMT_AUTOACTIV_BILL_HIS';

三、检查分区表的索引是否LOCAL类型
--先查看该表的索引

SELECT * FROM User_Indexes a WHERE a.table_name  = 'TBL_SMSMT_AUTOACTIV_BILL_HIS';

 --在查看索引是否为local类型;若不存在;则为全局索引

select table_name,index_name,LOCALITY from user_part_indexes where table_name='TBL_SMSMT_AUTOACTIV_BILL_HIS' ;

四、如果都是LOCAL索引,直接清除表分区数据(如果是全局索引,清除完成后需要重建)

     本地索引在你删除子分区表的时候会跟着删除;不会影响。

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是全局索引

 五, 验证是否释放空间;(可忽略)

  再执行第一步;


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM