暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

OceanBase分布式存储管理Oracle模式删除分区

2023-04-20
1003

您可以根据业务需要,删除分区表中的分区。删除分区时,会同时删除该分区的定义和数据。

分区表对删除分区操作的支持情况

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 语句报错,或者出现一些异常情况。您可以在 sys 租户下,通过视图 oceanbase.GV$OB_TRANSACTION_PARTICIPANTS 查询当前还未结束的事务上下文状态。

  • Oracle 模式下,对于有全局索引的一级分区表或二级分区表,删除分区时,需要通过在 ALTER TABLE 语句中添加 UPDATE GLOBAL INDEXES 关键字的方式来更新全局索引信息。如果未添加 UPDATE GLOBAL INDEXES 关键字,则删除分区后,该分区表上的全局索引会处于不可用状态。

删除一级分区

您可以根据业务需要,删除一级分区表或二级分区表中的一级分区。

语法

ALTER TABLE table_name DROP PARTITION partition_name_list [UPDATE GLOBAL INDEXES];

partition_name_list:
  partition_name [, partition_name ...]

说明

  • 删除一级分区时,可以删除一个或多个分区,但不能删除全部分区。

  • 删除分区会同时删除分区中的数据。如果您只需要删除数据,可以使用 TRUNCATE 语句。

示例

  • 删除一级分区表 tbl1_r 中的 M202005 和 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'))
             , PARTITION M202006 VALUES LESS THAN(TO_DATE('2020/07/01','YYYY/MM/DD'))
             , PARTITION M202007 VALUES LESS THAN(TO_DATE('2020/08/01','YYYY/MM/DD'))
             , PARTITION M202008 VALUES LESS THAN(TO_DATE('2020/09/01','YYYY/MM/DD'))
             , PARTITION M202009 VALUES LESS THAN(TO_DATE('2020/10/01','YYYY/MM/DD'))
             , PARTITION M202010 VALUES LESS THAN(TO_DATE('2020/11/01','YYYY/MM/DD'))
             , PARTITION M202011 VALUES LESS THAN(TO_DATE('2020/12/01','YYYY/MM/DD'))
             , PARTITION M202012 VALUES LESS THAN(TO_DATE('2021/01/01','YYYY/MM/DD'))
             , PARTITION MMAX VALUES LESS THAN (MAXVALUE)
             );
    Query OK, 0 rows affected
    
    obclient> ALTER TABLE tbl1_r DROP PARTITION M202005,M202006;
    Query OK, 0 rows affected
    
  • 删除分区表 t2_f_rr 的一级分区 p0

    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 DROP PARTITION p0;
    Query OK, 0 rows affected
    

删除二级分区

您可以根据业务需要,删除二级分区表中的二级分区,删除二级分区会同时删除该分区的定义和其中的数据。

语法

ALTER TABLE table_name DROP SUBPARTITION subpartition_name_list [ UPDATE GLOBAL INDEXES ];

subpartition_name_list:
  subpartition_name[, subpartition_name ...]

示例

删除分区表 t2_f_rr 中一级分区 p1 下的二级分区 sp5 和 sp6 并更新全局索引信息。

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

评论