暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

OceanBase分布式存储管理Oracle模式添加一级分区

2023-04-18
883

创建分区表后,您可以为分区表添加分区。

分区表对添加分区操作的支持情况

OceanBase 数据库的 Oracle 模式中:

  • 对于一级分区表,当前仅支持对 Range 分区和 List 分区执行添加分区操作,暂不支持对 Hash 分区执行添加分区操作。

  • 对于二级分区表,当前仅支持对 Range/List 类型(组合)的分区执行添加分区操作。

OceanBase 数据库的 Oracle 模式中,一级分区表和二级分区表对添加分区操作的具体支持情况如下表所示。

分区表分区类型添加一级分区添加二级分区
一级分区表Range / List支持-
一级分区表Hash不支持-
二级分区表Range + Range / Range + List支持支持
二级分区表Range + Hash不支持不支持
二级分区表List + Range / List + List支持支持
二级分区表List + Hash不支持不支持
二级分区表Hash + Range / Hash + List / Hash + Hash不支持不支持

添加一级分区

您可以向一级分区表、模板化二级分区表和非模板化二级分区表中添加一级分区。

向一级分区表和模板化二级分区表中添加一级分区

向一级分区表和模板化二级分区表中添加一级分区的 SQL 语法如下:

ALTER TABLE table_name ADD PARTITION partition_option;

partition_option:
  range_partition_option | list_partition_option

range_partition_option:
  partition_name VALUES LESS THAN partition_expr

list_partition_option:
  partition_name VALUES partition_expr

说明

  • 对于 Range 分区,只能在最大的分区之后添加一个分区,不可以在中间某个或者开始的地方添加分区。如果当前的分区中有 MAXVALUE 的分区,则不能继续添加分区。

  • 向 List 分区中添加一级分区时,要求添加的分区与之前的分区不冲突。如果一个 List 分区有默认分区即 Default Partition,则不能添加任何分区。

  • 在 Range/List 分区中添加一级分区不会影响全局索引和局部索引的使用。

  • 对于模板化二级分区表,添加一级分区时只需要指定一级分区的定义即可,二级分区的定义会⾃动按照模板填充。

部分示例如下:

  • 创建 Range 分区的一级分区表 tbl1_r,并添加分区 M202006

    obclient> CREATE TABLE tbl1_r(log_id INT,log_date DATE NOT NULL DEFAULT SYSDATE)
    PARTITION BY RANGE(log_date) 
    (PARTITION M202001 VALUES LESS THAN(TO_DATE('2020/02/01','YYYY/MM/DD'))
    , PARTITION M202002 VALUES LESS THAN(TO_DATE('2020/03/01','YYYY/MM/DD'))
    , PARTITION M202003 VALUES LESS THAN(TO_DATE('2020/04/01','YYYY/MM/DD'))
    , PARTITION M202004 VALUES LESS THAN(TO_DATE('2020/05/01','YYYY/MM/DD'))
    , PARTITION M202005 VALUES LESS THAN(TO_DATE('2020/06/01','YYYY/MM/DD'))
    );
    Query OK, 0 rows affected
    
    obclient> ALTER TABLE tbl1_r ADD PARTITION
           M202006 VALUES LESS THAN(TO_DATE('2020/07/01','YYYY/MM/DD'));
    Query OK, 0 rows affected
    
  • 创建 List 分区的一级分区表 tbl1_l,并添加分区 p4

    obclient> CREATE TABLE tbl1_l(log_id INT,log_value VARCHAR2(20))
           PARTITION BY LIST(log_value) 
            (PARTITION p1 VALUES ('A'),
             PARTITION p2 VALUES ( 'B' ),
             PARTITION p3 VALUES ( 'C' )
            );
    Query OK, 0 rows affected
    
    obclient> ALTER TABLE tbl1_l ADD PARTITION p4 VALUES('D');
    Query OK, 0 rows affected
    
  • 创建 Range + Range 分区的模板化二级分区表 t2_m_rr,再向其中添加一级分区 p2

    obclient> CREATE TABLE t2_m_rr(col1 INT,col2 INT)
           PARTITION BY RANGE(col1)
           SUBPARTITION BY RANGE(col2)
           SUBPARTITION TEMPLATE
             (SUBPARTITION mp0 VALUES LESS THAN(2020),
              SUBPARTITION mp1 VALUES LESS THAN(2021),
              SUBPARTITION mp2 VALUES LESS THAN(2022)
              )
             (PARTITION p0 VALUES LESS THAN(100),
              PARTITION p1 VALUES LESS THAN(200)
              );
    Query OK, 0 rows affected
    
    obclient> ALTER TABLE t2_m_rr ADD PARTITION p2 VALUES LESS THAN(300); 
    Query OK, 0 rows affected
    

向非模板化二级分区表中添加一级分区

向非模板化二级分区表中添加一级分区的 SQL 语法如下:

ALTER TABLE table_name ADD PARTITION partition_option (subpartition_option);

partition_option:
  range_partition_option | list_partition_option

range_partition_option:
  partition_name VALUES LESS THAN partition_expr

list_partition_option:
  partition_name VALUES partition_expr

subpartition_option:
  {SUBPARTITION subpartition_name VALUES LESS THAN range_partition_expr, ...}
 |{SUBPARTITION subpartition_name VALUES list_partition_expr, ....}
 |{SUBPARTITION subpartition_name, ....}

说明

对于非模板化二级分区表,添加一级分区时,需要同时指定一级分区的定义和该一级分区下的二级分区定义。

创建 Range + Range 分区的非模板化二级分区表 t2_f_rr,再向其中添加一级分区 p2 的示例如下:

obclient> CREATE TABLE t2_f_rr(col1 INT,col2 INT)
       PARTITION BY RANGE(col1)
       SUBPARTITION BY RANGE(col2)
        (PARTITION p0 VALUES LESS THAN(100)
          (SUBPARTITION sp0 VALUES LESS THAN(2020),
           SUBPARTITION sp1 VALUES LESS THAN(2021)
          ),
         PARTITION p1 VALUES LESS THAN(200)
          (SUBPARTITION sp2 VALUES LESS THAN(2020),
           SUBPARTITION sp3 VALUES LESS THAN(2021),
           SUBPARTITION sp4 VALUES LESS THAN(2022)
           )
         );
Query OK, 0 rows affected

obclient> ALTER TABLE t2_f_rr ADD PARTITION p2 VALUES LESS THAN(300)
       (SUBPARTITION sp5 VALUES LESS THAN(2020),
        SUBPARTITION sp6 VALUES LESS THAN(2021),
        SUBPARTITION sp7 VALUES LESS THAN(2022)
        ); 
Query OK, 0 rows affected
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论