【问题标题】:Split maxvalue partition in Oracle with new subpartition template使用新的子分区模板在 Oracle 中拆分 maxvalue 分区
【发布时间】:2020-03-03 05:06:15
【问题描述】:

如何在 Oracle 中使用新的子分区模板拆分 maxvalue 分区。

或者

如何在 Oracle 中拆分 maxvalue 分区并同时添加新的子分区

【问题讨论】:

    标签: sql oracle oracle12c database-partitioning


    【解决方案1】:

    您可以使用SPLIT PARTITION,如下:

    Oracle 设置:

    SQL> CREATE TABLE PART_EXAMPLE (
      2      ID             NUMBER,
      3      CREATED_DATE   DATE
      4  )
      5      PARTITION BY RANGE (
      6          CREATED_DATE
      7      )
      8      ( PARTITION T1_2019
      9          VALUES LESS THAN ( MAXVALUE )
     10      );
    
    Table created.
    

    检查分区:

    SQL> SELECT
      2      TABLE_NAME,
      3      PARTITION_NAME
      4  FROM
      5      USER_TAB_PARTITIONS
      6  WHERE TABLE_NAME = 'PART_EXAMPLE';
    
    TABLE_NAME      PARTITION_
    --------------- ----------
    PART_EXAMPLE    T1_2019
    

    将分区一分为二:

    SQL> ALTER TABLE PART_EXAMPLE
      2    SPLIT PARTITION T1_2019 AT (TO_DATE('31-DEC-2017 23:59:59', 'DD-MON-YYYY HH24:MI:SS'))
      3    INTO (PARTITION T1_2017, PARTITION T1_2019)
      4    ONLINE;
    
    Table altered.
    

    现在,检查分区:

    SQL> SELECT
      2      TABLE_NAME,
      3      PARTITION_NAME
      4  FROM
      5      USER_TAB_PARTITIONS
      6  WHERE TABLE_NAME = 'PART_EXAMPLE';
    
    TABLE_NAME      PARTITION_
    --------------- ----------
    PART_EXAMPLE    T1_2017
    PART_EXAMPLE    T1_2019
    
    SQL>
    

    我希望它很清楚。

    干杯!!

    【讨论】:

      【解决方案2】:

      您可以为表设置子分区模板。但这只会影响新分区。它对现有分区没有影响:

      create table t (
        c1 int, c2 int
      ) partition by range ( c1 ) 
        subpartition by hash ( c2 )
        subpartition template 2 
        (
          partition p0 values less than ( 1 ),
          partition pmax values less than ( maxvalue )
        );
      
      select partition_name, subpartition_name
      from   user_tab_subpartitions
      where  table_name = 'T';
      
      PARTITION_NAME    SUBPARTITION_NAME   
      P0                SYS_SUBP2922         
      P0                SYS_SUBP2923         
      PMAX              SYS_SUBP2924         
      PMAX              SYS_SUBP2925   
      
      alter table t 
        set subpartition template 1;
      
      select partition_name, subpartition_name
      from   user_tab_subpartitions
      where  table_name = 'T';
      
      PARTITION_NAME    SUBPARTITION_NAME   
      P0                SYS_SUBP2922         
      P0                SYS_SUBP2923         
      PMAX              SYS_SUBP2924         
      PMAX              SYS_SUBP2925  
      

      您也可以在拆分时设置模板。但同样,这不会影响现有分区:

      alter table t 
        split partition pmax at ( 2 )
        into ( 
          partition p1 set subpartition template 1, 
          partition pmax set subpartition template 1
        );
      
      select partition_name, subpartition_name
      from   user_tab_subpartitions
      where  table_name = 'T';
      
      PARTITION_NAME    SUBPARTITION_NAME   
      P0                SYS_SUBP2922         
      P0                SYS_SUBP2923         
      P1                SYS_SUBP2926         
      P1                SYS_SUBP2927         
      PMAX              SYS_SUBP2924         
      PMAX              SYS_SUBP2925  
      

      如果要在拆分分区时更改子分区,请在 subpartitions 子句中定义它们:

      alter table t 
        split partition pmax at ( 3 )
        into ( 
          partition p2 subpartitions 1, 
          partition pmax subpartitions 4
        );
      
      select partition_name, subpartition_name
      from   user_tab_subpartitions
      where  table_name = 'T';
      
      PARTITION_NAME    SUBPARTITION_NAME   
      P0                SYS_SUBP2936         
      P0                SYS_SUBP2937         
      P1                SYS_SUBP2940         
      P1                SYS_SUBP2941         
      P2                SYS_SUBP2942         
      PMAX              SYS_SUBP2943         
      PMAX              SYS_SUBP2944         
      PMAX              SYS_SUBP2945         
      PMAX              SYS_SUBP2946 
      

      【讨论】:

        猜你喜欢
        • 2019-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多