如何在主RANGE分区中自动创建LIST子分区



我有一个表,上面有RANGE Partition on date和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的实际值自动创建子分区。

请提出建议。

否。在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

最新更新