美文网首页Oracle数据库管理之道
普通表转成分区表,时报错:oralce ORA-14132: t

普通表转成分区表,时报错:oralce ORA-14132: t

作者: Elijah_Su | 来源:发表于2016-09-13 09:14 被阅读0次

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

思路如下:

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: t

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

  • MySQL-31.分区表

    分区表有什么问题,为什么公司规范不让使用分区表呢? 1.分区表是什么? 为了说明分区表的组织形式,先创建一个表 t...

  • linux下大于2TB硬盘格式化及挂载-GPT分区步骤

    先介绍两种分区表: MBR分区表:(MBR含义:主引导记录)所支持的最大卷:2T(T: terabytes,1TB...

  • hive sql 分区

    创建分区表,以日期作为分区,一般先创建分区表,再插入数据 创建表t2,插入一行数据,待用,t2与t1表结构一样的,...

  • 第八周:磁盘分区命令

    Fdisk命令详解: m:获取帮助 n:新建分区 p:显示分区表 d:删除分区 b:设置卷标 w:写入分区表 t:...

  • 【Hive】优化

    分区表的设计和优化 普通表结构问题 使用分区表可以优化上述查询问题 分桶表的设计和优化 Join问题 分桶表设计 ...

  • fdisk命令使用

    常用的几个命令 m:获取帮助 n:新建分区 p:显示分区表 d:删除分区 b:设置卷标 w:保存分区表 t:改变分...

  • MBR分区与GPT分区

    Linux系统中有两种常见的分区表 MBR分区表(主引导记录分区表)和 GPT分区表(GUID分区表) MBR分区...

  • hive 动态分区

    目的,往分区表中插入数据: 创建一个分区表:插入数据报错,原因是没有开启动态分区 执行命令: set hive.e...

  • Vertica的这些事(九)—— vertica存储统计信息

    vertica存储统计信息: 表数量: 分区表数量: 总表占大小: 分区表总大小: 分区表大小(前10): 分区表...

网友评论

    本文标题:普通表转成分区表,时报错:oralce ORA-14132: t

    本文链接:https://www.haomeiwen.com/subject/tqwsettx.html