exchange partition原理探究

      exchange partition提供了一种在表与表或分区与分区之间快速迁移数据的方式。exchange partition适用于所有分区格式,你可以将数据从分区表迁移到非分区表,也可以从非分区表迁移到分区表,或者在range分区和hash分区之间进行转换。
      由于 直接 更改数据字典,因此其基本不涉及IO等磁盘操作,效率极其高。 下面通过实验进行说明。
     1.环境准备

点击(此处)折叠或打开

  1. create table t_partition(id number,data varchar2(100)) tablespace test
  2. partition by range(id)
  3. (partition p0 values less than(100),
  4. partition p1 values less than(200),
  5. partition p2 values less than(300),
  6. partition pmax values less than(maxvalue)
  7. );

  8. create table temp(id number,data varchar2(100)) tablespace USERS;

  9. //temp、t_partition表中插入测试数据
  10. insert into temp values(1,'temp');
  11. insert into temp values(30,'temp');
  12. insert into temp values(99,'temp');
  13. commit;
  14. insert into t_partition values(5,'t_partition');
  15. insert into t_partition values(69,'t_partition');
  16. commit;

  17. //验证
  18. SELECT * FROM temp;
  19.         ID DATA
  20. ---------- ---------
  21.          1 temp
  22.         30 temp
  23.         99 temp

  24. SELECT * FROM t_partition partition(p0);
  25.         ID DATA
  26. ---------- -------------------
  27.          5 t_partition
  28.         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 ;

点击(此处)折叠或打开

  1. alter table t_partition exchange partition p0 with table temp;
  上述命令敲回车后立马返回成功。下面对数据进行验证,确认数据迁移是否正确。

点击(此处)折叠或打开

  1. SELECT * FROM temp;
  2.         ID DATA
  3. ---------- -------------------
  4.          5 t_partition
  5.         69 t_partition

  6. SELECT * FROM t_partition partition(p0);
  7.         ID DATA
  8. ---------- -------------------
  9.          1 temp
  10.         30 temp
  11.         99 temp
可以看到原先t_partition分区p0的数据已经交换到了temp表中,同样temp表的数据也交换到了p0分区。初步查看后,我们进一步检查一下表存储以及data_object_id情况。


惊奇的发现,不但temp、分区p0对应的表空间进行了互换,其各自的data_object_id同样进行了对调。

  3.结论
上述实验表的记录较少,可能不具有代表性。向temp以及分区p0分别插入了100w条数据后,再进行exchange partition实验,发现其速度同样非常快,仅用38毫秒,限于篇幅,此处只粘贴了操作结果截图:

点击(此处)折叠或打开

  1. SELECT count(*) FROM t_partition partition(p0);
  2.   COUNT(*)
  3. ----------
  4.    1000003

  5. SELECT count(*) FROM TEMP;

  6.   COUNT(*)
  7. ----------
  8.    1000002

  9. alter table t_partition exchange partition p0 with table temp;
  10. Elapsed: 00:00:00.38
了解本质,对其进行了10046事件进行跟踪,以下是10046事件的部分截图:

日志可以清楚的看到系统是通过更改数据库自带的$视图,来完成temp和分区p0的对调的,进而完成相应数据的迁移。
通过上述实验验证了开篇说的:exchange partition通过直接更改数据字典,基本不涉及IO等磁盘操作,效率极其高的观点。



   

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29827284/viewspace-2135662/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29827284/viewspace-2135662/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值