• 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本身并没有改变,和物理存储位置无关,但必须是分区表和非分区表 之间才可以交换。

  • 相关阅读:
    如何从零开始开发一款嵌入式产品(20年的嵌入式经验分享学习)如何从零开始开发一款嵌入式产品(20年的嵌入式经验分享学习)
    shell命令【ulimit】
    ARM开发经典学习网站推荐
    [转]链表逆序
    [转]Rhythmbox中文乱码解决办法
    vi/vim 查找替换使用方法
    [转]程序员的十个层次 你属于哪一层?
    如何在程序中删除一个文件
    C/C++编译器错误代码大全
    R制作eset 的简单步骤
  • 原文地址:https://www.cnblogs.com/pangblog/p/3289948.html
Copyright © 2020-2023  润新知