如何在 oracle 中已经间隔分区 table 中创建子分区

How to create sub partition in already interval partitioned table in oracle

我有一个 table,它是按日期列进行间隔分区的。我想将这些已经创建的分区子分区为列表分区。

如何在 Oracle 中执行此操作?

假设有一个table,其中有一个日期列和一个区域列以及其他列。

Table 已使用此日期列进行间隔分区。

现在我要将这些区间分区在region列的基础上进行子分区

怎么可能?

在 19c 上,您可以使用 alter table 更改分区策略(这是在 18c 中添加的)。这允许您定义子分区:

create table t (
  c1 date, c2 int
) partition by range ( c1 )
  interval ( interval '1' month ) (
    partition p0 values less than ( date'2022-03-01' )
  );
  
insert into t 
with rws as (
  select level x from dual
  connect by level <= 60
)
  select date'2022-03-01' + x, mod ( x, 3 ) from rws;
commit;

select partition_name, subpartition_name, high_value
from   user_tab_subpartitions
where  table_name = 'T';

no rows selected
  
alter table t
  modify partition by range ( c1 )
  interval ( interval '1' month )
  subpartition by list ( c2 )
  subpartition template (
    subpartition p1 values ( 1 ),
    subpartition p2 values ( 2 ),
    subpartition pdef values ( default )
  ) (
    partition p0 values less than ( date'2022-03-01' )
  )
  online ;
    
select partition_name, subpartition_name, high_value
from   user_tab_subpartitions
where  table_name = 'T';

PARTITION_NAME  SUBPARTITION_NA HIGH_VALUE    
--------------- --------------- -------------
P0              P0_P1           1            
P0              P0_P2           2            
P0              P0_PDEF         default      
SYS_P42745      SYS_SUBP42742   1            
SYS_P42745      SYS_SUBP42743   2            
SYS_P42745      SYS_SUBP42744   default      
SYS_P42749      SYS_SUBP42746   1            
SYS_P42749      SYS_SUBP42747   2            
SYS_P42749      SYS_SUBP42748   default 

请注意 支持间隔或 auto-list 子分区。您需要更新子分区模板以根据需要添加新值。