Oracle 自动列表分区
我正在使用Oracle 11g 我有一个要添加分区的大表。我的分区(和子分区)键列属于Oracle 自动列表分区,oracle,varchar,database-partitioning,Oracle,Varchar,Database Partitioning,我正在使用Oracle 11g 我有一个要添加分区的大表。我的分区(和子分区)键列属于VARCHAR2类型 我知道有一个可以自动创建的间隔范围分区,但是我需要对列表分区做同样的事情。有没有办法用VARCHAR2type(不代表任何日期)实现这一点 例如: create table t1 (name varchar2(30), company varchar2(10), value number); 我希望每个新的名称都有一个新的分区。有没有一种方法可以做到这一点,而不用编写特定的PL/SQL代
VARCHAR2
类型
我知道有一个可以自动创建的间隔范围分区
,但是我需要对列表分区
做同样的事情。有没有办法用VARCHAR2
type(不代表任何日期)实现这一点
例如:
create table t1 (name varchar2(30), company varchar2(10), value number);
我希望每个新的
名称都有一个新的分区。有没有一种方法可以做到这一点,而不用编写特定的PL/SQL代码来检查是否需要一个新分区并进行创建?可能有一些模式或其他什么…自动列表分区被使用。所以你需要升级才能做到这一点
同时,您可以创建一个包罗万象的默认分区。然后根据需要拆分新值:
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
很遗憾,您需要升级。Oracle 12c R2引入了自动列表分区。谢谢,看起来是个好主意。拆分时是否存在访问默认分区数据的问题?@user2671057您的意思是在自动拆分时查询它?我没有意识到任何问题;但我还没有进行过广泛的测试,我的意思是在11g版本中查询默认分区——在ALTERTABLESPILT分区时。通过我的测试,它将导致对象-不再存在异常。如果查询在整个表上,它也会引发。。。这是我的问题。