exchange partition提供了一种在表与表或分区与分区之间快速迁移数据的方式。exchange partition适用于所有分区格式,你可以将数据从分区表迁移到非分区表,也可以从非分区表迁移到分区表,或者在range分区和hash分区之间进行转换。
由于直接更改数据字典,因此其基本不涉及IO等磁盘操作,效率极其高。下面通过实验进行说明。
1.环境准备
-
create table t_partition(id number,data varchar2(100)) tablespace test
-
partition by range(id)
-
(partition p0 values less than(100),
-
partition p1 values less than(200),
-
partition p2 values less than(300),
-
partition pmax values less than(maxvalue)
-
);
-
-
create table temp(id number,data varchar2(100)) tablespace USERS;
-
-
//temp、t_partition表中插入测试数据
-
insert into temp values(1,'temp');
-
insert into temp values(30,'temp');
-
insert into temp values(99,'temp');
-
commit;
-
insert into t_partition values(5,'t_partition');
-
insert into t_partition values(69,'t_partition');
-
commit;
-
-
//验证
-
SELECT * FROM temp;
-
ID DATA
-
---------- ---------
-
1 temp
-
30 temp
-
99 temp
-
-
SELECT * FROM t_partition partition(p0);
-
ID DATA
-
---------- -------------------
-
5 t_partition
-
69 t_partition
记录两张表的object_id、data_object_id信息以及相关的存储信息。
2.exchange partition
exchange partitoin基本语法如下:
alter table table_name1 exchange partition/subpartition partition_name with table table_name2;
-
alter table t_partition exchange partition p0 with table temp;
上述命令敲回车后立马返回成功。下面对数据进行验证,确认数据迁移是否正确。
-
SELECT * FROM temp;
-
ID DATA
-
---------- -------------------
-
5 t_partition
-
69 t_partition
-
-
SELECT * FROM t_partition partition(p0);
-
ID DATA
-
---------- -------------------
-
1 temp
-
30 temp
-
99 temp
可以看到原先t_partition分区p0的数据已经交换到了temp表中,同样temp表的数据也交换到了p0分区。初步查看后,我们进一步检查一下表存储以及data_object_id情况。
惊奇的发现,不但temp、分区p0对应的表空间进行了互换,其各自的data_object_id同样进行了对调。
3.结论
上述实验表的记录较少,可能不具有代表性。向temp以及分区p0分别插入了100w条数据后,再进行exchange partition实验,发现其速度同样非常快,仅用38毫秒,限于篇幅,此处只粘贴了操作结果截图:
-
SELECT count(*) FROM t_partition partition(p0);
-
COUNT(*)
-
----------
-
1000003
-
-
SELECT count(*) FROM TEMP;
-
-
COUNT(*)
-
----------
-
1000002
-
-
alter table t_partition exchange partition p0 with table temp;
-
Elapsed: 00:00:00.38
为了解本质,对其进行了10046事件进行跟踪,以下是10046事件的部分截图:

日志可以清楚的看到系统是通过更改数据库自带的$视图,来完成temp和分区p0的对调的,进而完成相应数据的迁移。
通过上述实验验证了开篇说的:exchange partition通过直接更改数据字典,基本不涉及IO等磁盘操作,效率极其高的观点。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29827284/viewspace-2135662/
,如需转载,请注明出处,否则将追究法律责任。