【问题标题】:How to create LIST sub partitions automatically into main RANGE partition如何在主 RANGE 分区中自动创建 LIST 子分区
【发布时间】:2019-10-24 05:36:16
【问题描述】:

我有一个表,其中包含日期范围分区和 LIST 子分区,如下所述。

CREATE TABLE REC_XXX_DATA 
( 
    XXX_ID VARCHAR2(8), 
    TEMPLATE_ID VARCHAR2(20), 
    XXX_DATE DATE 
) 
partition by RANGE(XXX_DATE) INTERVAL (numtodsinterval(7, 'DAY')) 
subpartition by list(XXX_ID)
(
partition OCT2619 values less than (TO_DATE(' 2019-10-26 23:59:59', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
(
   subpartition T360_OCT2619 values('AAA'),
   subpartition ABMC_OCT2619 values('BBB')    
) 
);

我在 XXX_DATE 列中插入 2019 年 10 月 27 日的数据然后将一个新的 RANGE 分区添加到表中,并且它的子分区也添加了列表值作为 DEFAULT。因此所有数据都移动到同一个子分区中。

我的要求是使用我们插入的 XXX_ID 的实际值自动创建子分区。

请提出建议。

【问题讨论】:

    标签: oracle oracle11g


    【解决方案1】:

    没有。最高 12cR2 的子分区级别不支持自动列表分区。我不知道更高版本。

    如果您已经知道 XXX_ID 列的不同值,并且 XXX_ID 的新值很少,您可以创建一个子分区模板,为新值保留一个默认分区。

    CREATE TABLE REC_XXX_DATA 
    ( 
        XXX_ID VARCHAR2(8), 
        TEMPLATE_ID VARCHAR2(20), 
        XXX_DATE DATE 
    ) 
    partition by RANGE(XXX_DATE) INTERVAL (numtodsinterval(7, 'DAY')) 
    subpartition by list(XXX_ID)
    subpartition template
    (subpartition AAA values('AAA'),
     subpartition BBB values('BBB'),
     subpartition XXX values(DEFAULT))
    (
     partition OCT2619 values less than (TO_DATE(' 2019-10-26 23:59:59', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
     (
       subpartition AAA values('AAA'),
       subpartition BBB values('BBB'),
       subpartition XXX values(DEFAULT)
     ) 
    );
    
    insert into REC_XXX_DATA values('AAA','T1',to_date('27-oct-19','dd-mon-yy'));
    
    select table_name, partition_name, subpartition_name, high_value 
      from user_tab_subpartitions 
     where table_name = 'REC_XXX_DATA' order by 1,2,3;
    

    输出:

    TABLE_NAME    PARTITION_NAME SUBPARTITION_NAME HIGH_VALUE
    REC_XXX_DATA  OCT2619        AAA               'AAA'
    REC_XXX_DATA  OCT2619        BBB               'BBB'
    REC_XXX_DATA  OCT2619        XXX               DEFAULT
    REC_XXX_DATA  SYS_P197962    SYS_SUBP197959    'AAA'
    REC_XXX_DATA  SYS_P197962    SYS_SUBP197960    'BBB'
    REC_XXX_DATA  SYS_P197962    SYS_SUBP197961    DEFAULT
    
    select count(1) from REC_XXX_DATA subpartition(SYS_SUBP197959);--1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多