普通表转成分区表,时报错:oralce ORA-14132: table cannot be used in EXCHANGE

由于业务需求, 说历史表查询慢,所以决定把一个普通表转成分区表, 按照时间来分区, 我这里是按月分区,

思路如下:

1.先创建一个新的分区表,

create table TB_BA_AA_NEW

(

seq_id            NUMBER(12) not null,

seq_nbr          NUMBER(4) not null,

subs_id          NUMBER(12) not null,

msinfo_id        NUMBER(10) not null,

hist_create_date  DATE,

msparam_id        NUMBER(10)

)

rowdependencies

partition by range (HIST_CREATE_DATE)

(

partition P201512 values less than (TO_DATE(' 2016-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),

partition P201601 values less than (TO_DATE(' 2016-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))

);

2. 然后按每个月建成一个表

create table TB_BA_AA_1512

(

seq_id            NUMBER(12) not null,

seq_nbr          NUMBER(4) not null,

subs_id          NUMBER(12) not null,

msinfo_id        NUMBER(10) not null,

hist_create_date  DATE,

msparam_id        NUMBER(10)

)

;

create table TB_BA_AA_1601

(

seq_id            NUMBER(12) not null,

seq_nbr          NUMBER(4) not null,

subs_id          NUMBER(12) not null,

msinfo_id        NUMBER(10) not null,

hist_create_date  DATE,

msparam_id        NUMBER(10)

)

;

3.导入数据:

insert into TB_BA_AA_1512

SELECT  /*+ append nologging */ /*+PARALLEL(a,5)*/ *

FROM  TB_BA_AA

WHERE  hist_create_date between TO_DATE('2015-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') and TO_DATE('2015-12-31 23:59:59', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN');

commit;

insert into TB_BA_AA_1601

SELECT  /*+ append nologging */ /*+PARALLEL(a,5)*/ *

FROM  TB_BA_AA

WHERE  hist_create_date between TO_DATE('2016-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') and TO_DATE('2016-01-31 23:59:59', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN');

commit;

4.分区交换

alter table TB_BA_AA_NEW exchange partition P201601 with table TB_BA_AA_1601;

但是执行上面的语句时报错 : oralce ORA-14132: table cannot be used in EXCHANGE

查询找了外国的英文网站提供如下的信息,但是并没有我想要的

ORA-14132: table cannot be used in EXCHANGE

Cause: An attempt was made to issue an ALTER TABLE EXCHANGE PARTITION | SUBPARTITION command, but the non-partitioned table cannot be used in the EXCHANGE because one or more of the following apply:

– it is a typed table

– it is a temporary table

– it contains ADT columns

– it contains nested-table columns

– it contains REF columns

– it contains array columns

– it is an index-organized table

– it contains LOB columns

– it is a nested table  --嵌套表

– it is created with row dependency and the partitioned table is not

– it is created without row dependency and the partitioned table is

Action :

Make sure the non-partitioned table does not violate any of the above restrictions for the ALTER TABLE EXCHANGE PARTITION | SUBPARTITION command.

看回去之前的建表语句发现 create table TB_BA_AA_NEW 加入了rowdependencies 行追踪, 而TB_BA_AA_1601并没有加,导致报错. 

问题解决

你可能感兴趣的:(普通表转成分区表,时报错:oralce ORA-14132: table cannot be used in EXCHANGE)