使用Oracle EXCHANGE PARTITION清理数据(或truncate)或处理分区表坏块 - 1

Exchange partition提供了一种方式,让你在表与表或分区与分区之间迁移数据,注意不是将表转换成分区或非分区的形式,而仅只是迁移表中数据(互相迁移),由于其号称是采用了更改数据字典的方式,因此效率最高(几乎不涉及io操作),看文档说是object_id不变,但是data_object_id交换 ,具体待研究 。Exchange partition适用于所有分区格式,你可以将数据从分区表迁移到非分区表,也可以从非分区表迁移至分区表,或者从hash partition到range partition诸如此类吧。

其语法很简单:alter table tbname1 exchange partition/subpartition ptname with table tbname2;

注意点:
l 涉及交换的两表之间表结构必须一致,除非附加with validation子句;
l 如果是从非分区表向分区表做交换,非分区表中的数据必须符合分区表中指定分区的规则,除非附加without validation子句;
l 如果从分区表向分区表做交换,被交换的分区的数据必须符合分区规则,除非附加without validation子句;
l Global索引或涉及到数据改动了的global索引分区会被置为unusable,除非附加update indexes子句。

提示:
一旦附加了without validation子句,则表示不再验证数据有效性,因此指定该子句时务必慎重。

以分区表 DWIFIN.DWI_INV_TRANSACTION_JOIN 为例子,要清理分区P_201304的数据 :

1, 建立一个临时表 DWIFIN.DWI_INV_TRANSACTION_JOIN_TMP (普通表即可)  
    字段和原表一致 。
请使用浏览器的分享功能分享到微信等