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

  • 相关阅读:
    从零开始入门 K8s| 详解 Pod 及容器设计模式
    从零开始入门 K8s| 阿里技术专家详解 K8s 核心概念
    时间和空间的完美统一!阿里云时空数据库正式商业化
    SaaS加速器,到底加速了谁? 剖析阿里云的SaaS战略:企业和ISV不可错过的好文
    来杭州云栖大会,全面了解企业如何实现云上IT治理
    DataV教你如何给可视化应用一键美颜
    Serverless Kubernetes全面升级2.0架构:支持多命名空间、RBAC、CRD、PV/PVC等功能
    基于 APIGateway 打造生产级别的 Knative 服务
    P1434 滑雪
    P1613 跑路
  • 原文地址:https://www.cnblogs.com/pangblog/p/3289948.html
Copyright © 2011-2022 走看看