exchange partition提供了一种在表与表或分区与分区之间快速迁移数据的方式。exchange partition适用于所有分区格式,你可以将数据从分区表迁移到非分区表,也可以从非分区表迁移到分区表,或者在range分区和hash分区之间进行转换。
由于 直接 更改数据字典,因此其基本不涉及IO等磁盘操作,效率极其高。 下面通过实验进行说明。
1.环境准备
记录两张表的object_id、data_object_id信息以及相关的存储信息。
2.exchange partition
exchange partitoin基本语法如下:
alter table table_name1 exchange partition/subpartition partition_name with table table_name2 ;
上述命令敲回车后立马返回成功。下面对数据进行验证,确认数据迁移是否正确。
可以看到原先t_partition分区p0的数据已经交换到了temp表中,同样temp表的数据也交换到了p0分区。初步查看后,我们进一步检查一下表存储以及data_object_id情况。
惊奇的发现,不但temp、分区p0对应的表空间进行了互换,其各自的data_object_id同样进行了对调。
3.结论
上述实验表的记录较少,可能不具有代表性。向temp以及分区p0分别插入了100w条数据后,再进行exchange partition实验,发现其速度同样非常快,仅用38毫秒,限于篇幅,此处只粘贴了操作结果截图:
为
了解本质,对其进行了10046事件进行跟踪,以下是10046事件的部分截图:
![](//img.blog.itpub.net/blog/attachment/201703/20/29827284_1489986623ONN3.png?x-oss-process=style/bb)
日志可以清楚的看到系统是通过更改数据库自带的$视图,来完成temp和分区p0的对调的,进而完成相应数据的迁移。
通过上述实验验证了开篇说的:exchange partition通过直接更改数据字典,基本不涉及IO等磁盘操作,效率极其高的观点。
由于 直接 更改数据字典,因此其基本不涉及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
![](http://img.blog.itpub.net/blog/attachment/201703/20/29827284_14899848872vyy.png?x-oss-process=style/bb)
![](http://img.blog.itpub.net/blog/attachment/201703/20/29827284_1489983773XOxo.png?x-oss-process=style/bb)
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
![](http://img.blog.itpub.net/blog/attachment/201703/20/29827284_1489984358088u.png?x-oss-process=style/bb)
![](http://img.blog.itpub.net/blog/attachment/201703/20/29827284_1489984926xMix.png?x-oss-process=style/bb)
惊奇的发现,不但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
![](http://img.blog.itpub.net/blog/attachment/201703/20/29827284_1489986623ONN3.png?x-oss-process=style/bb)
日志可以清楚的看到系统是通过更改数据库自带的$视图,来完成temp和分区p0的对调的,进而完成相应数据的迁移。
通过上述实验验证了开篇说的:exchange partition通过直接更改数据字典,基本不涉及IO等磁盘操作,效率极其高的观点。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29827284/viewspace-2135662/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29827284/viewspace-2135662/