自动列表分区

时间:2018-12-17 09:29:41

标签: oracle varchar database-partitioning

我正在使用Oracle 11g。

我有想要添加分区的大表。我的分区(和子分区)键列是INTERVAL RANGE PARTITION类型。

我知道可以自动创建一个list partition,但是我需要对VARCHAR2做同样的事情。有没有一种方法可以使用create table t1 (name varchar2(30), company varchar2(10), value number); 类型(不代表任何日期)来做到这一点。

示例:

name

我希望每个新的v-for都将有一个新分区。有没有一种方法,而无需编写特定的PL / SQL代码来检查是否需要新分区并进行创建呢?也许有一些图案或某种东西...

1 个答案:

答案 0 :(得分:3)

自动列表分区为added in 12.2。因此,您需要升级才能执行此操作。

同时,您可以创建一个通用的默认分区。然后根据需要拆分出新值:

create table t (
  c1 int
) partition by list ( c1 ) (
  partition pdef values ( default ) 
);

select partition_name, high_value 
from   user_tab_partitions
where  table_name = 'T';

PARTITION_NAME   HIGH_VALUE   
PDEF             default     

insert into t values ( 1 );
insert into t values ( 2 );

alter table t 
  split partition pdef
  values ( 1 ) into ( 
    partition p1, partition pdef 
  );

alter table t 
  split partition pdef
  values ( 2 ) into ( 
    partition p2, partition pdef 
  );

select partition_name, high_value 
from   user_tab_partitions
where  table_name = 'T';

PARTITION_NAME   HIGH_VALUE   
P1               1            
P2               2            
PDEF             default  

当您到达12.2时,可以将其切换到自动列表。但是您需要先删除默认分区!

alter table t set partitioning automatic;

ORA-14852: SET [SUB]PARTITIONING AUTOMATIC is not legal on this table.

alter table t drop partition pdef;

alter table t set partitioning automatic;

insert into t values ( 3 );

select partition_name, high_value 
from   user_tab_partitions
where  table_name = 'T';

PARTITION_NAME   HIGH_VALUE   
P1               1            
P2               2            
SYS_P5201        3