zoukankan      html  css  js  c++  java
  • oracle 分区表exchange原理

         oracle分区的exchange操作非常快,那原理是什么呢?下面我们来做个实验:

    SQL> create table test (id number(3));
    表已创建。

    SQL> insert into test values (1);
    已创建 1 行。

    SQL> commit;
    提交完成。

    SQL> select object_id,data_object_id from user_objects s where s.object_name='TEST';
     OBJECT_ID DATA_OBJECT_ID
    ---------- --------------
        180148         180148

    SQL> create table test_part(id number(3)) partition by range(id)
      2      (partition p1 values less than (10),
      3       partition p2 values less than (20));
    表已创建。

    SQL> col object_name format a20
    SQL> col subobject_name format a20
    SQL> select object_name,s.subobject_name,object_id, data_object_id
      2    from user_objects s
      3   where s.object_name = 'TEST_PART';
     
    OBJECT_NAME          SUBOBJECT_NAME        OBJECT_ID DATA_OBJECT_ID
    -------------------- -------------------- ---------- --------------
    TEST_PART            P1                      
    180150         180150
    TEST_PART            P2                       180151         180151
    TEST_PART                                     180149

    SQL> select * from test;
            ID
    ----------
             1
    SQL> select * from test_part;
    未选定行

    SQL> alter table test_part exchange partition p1 with table test;
    表已更改。

    SQL> select * from test;
    未选定行

    SQL> select * from test_part;
            ID
    ----------
             1
    SQL> select * from test_part partition (p1);

            ID
    ----------
             1

    SQL> select object_id,data_object_id from user_objects s where s.object_name='TEST';
     OBJECT_ID DATA_OBJECT_ID
    ---------- --------------
        180148         180150

    SQL> select object_name,s.subobject_name,object_id, data_object_id
      2    from user_objects s
      3   where s.object_name = 'TEST_PART';
    OBJECT_NAME          SUBOBJECT_NAME    OBJECT_ID   DATA_OBJECT_ID
    -------------------- ---------------- ----------   --------------
    TEST_PART            P1                
    180150         180148
    TEST_PART            P2                 180151         180151
    TEST_PART                               180149

         exchange只是在oracle的数据字典中修改了分区和表的结构。数据并未发生任何修改,因此速度很快。更详细一点就是只是把不同object_id 对应的data_object_id交换了一下,而segment本身并没有改变,和物理存储位置无关,但必须是分区表和非分区表 之间才可以交换。

  • 相关阅读:
    Android多屏幕适配
    android应用签名详解
    内部类与静态内部类详解
    SpringBoot整合Spring Retry实现重试机制
    行为型模式之模板方法模式
    行为型模式之操作复杂对象结构(访问者模式)
    行为型模式之算法的封装与切换(策略模式)
    行为型模式之处理对象的多种状态及其相互转换(状态模式)
    行为型模式之对象间的联动(观察者模式)
    行为型模式之撤销功能的实现(备忘录模式)
  • 原文地址:https://www.cnblogs.com/pangblog/p/3289948.html
Copyright © 2011-2022 走看看