Oracle分区数据问题的分析和修复

数据库2025-11-03 00:55:187245

今天根据同事的分区反馈,处理了一个分区表的数据问题,也让我对Oracle的问题分区表功能有了进一步的理解。

首先根据开发同事的析和修复反馈,他们在程序批量插入一部分数据的分区时候,总是数据会有一部分请求执行失败,而查看日志就是问题ORA-14400的错误,对于这类问题,析和修复我有一个很直观的分区感觉,分区有问题。数据

> INSERT INTO DY_USER_ANALYSIS_MIN(ID,问题STAT_TIME,GAME_TYPE,ZONE_ID,GROUP_ID,ONLINE_5CNT)     VALUES(100,to_date(2017-07-12 17:40:00,yyyy-mm-dd HH24:mi:ss),pz,to_number(-1),to_number(-1),to_number(0)); INSERT INTO DY_USER_ANALYSIS_MIN(ID,STAT_TIME,GAME_TYPE,ZONE_ID,GROUP_ID,ONLINE_5CNT)             * ERROR at line 1: ORA-14400: inserted partition key does not map to any partition

而如果把‘pz’修改为另外一个字符串dhsh就没问题。

所以这样一个ORA问题,析和修复通过初始信息我得到一个基本的分区推论,那就是数据没有符合条件的分区了。而如果仔细分析,问题会发现这个问题似乎有些蹊跷。

一般的分区表都是Range分区,基本就是数值范围或者是云南idc服务商日期来做范围分区,这个问题该怎么理解呢,如果按照时间分区,那么另外一个SQL插入也应该失败才对。

所以带着疑惑,我查看了分区的情况,发现这个表竟然有默认键值maxvlue的分区,所以如果说指定的Range分区不存在,似乎有些说不通。

这个问题该如果解决呢,一个直观的地方就是查看表的DDL,dbms_metadata.get_ddl即可得到。

得到的DDL一看,我就有些懵了,开发同学怎么知道这个list分区,竟然已经用上了这个还算高级的特性吧,就是Range-list分区。

PARTITION BY RANGE ("STAT_TIME")   SUBPARTITION BY LIST ("GAME_TYPE")   SUBPARTITION TEMPLATE (     SUBPARTITION "SP_ABC" values ( abc )   TABLESPACE "TEST_DATA" , 。。。     SUBPARTITION "SP_OTHER" values ( xjzj, hij )  TABLESPACE "TEST_DATA"  )  (PARTITION "P_OLD"  VALUES LESS THAN (TO_DATE( 2015-01-01 00:00:00, SYYYY-MM-DD HH24:MI:SS, NLS_CALENDAR=GREGORIAN))

对于这类问题,虽然还是有些陌生,但是还是企商汇有一些分区表的底子的,所以分析起来也不会有太大的偏差。

按照DDL的格式,我们是要想修改template的子分区模板规则。

alter table TLSTAT_NEWBG.DY_USER_ANALYSIS_MIN  set SUBPARTITION TEMPLATE (     SUBPARTITION "SP_ABC" values ( abc )   TABLESPACE "TEST_DATA" ,     。。。     SUBPARTITION "SP_OTHER" values ( xjzj, hij,pz’)   TABLESPACE "TEST_DATA"  )

按照这种方式修改模板就没有问题了,然后继续尝试插入数据,发现还是同样的错误。这个时候是哪里的问题了呢。

根据错误反复排查,还是指向了分区的定义,那么我们看看其中一个分区的情况。

(PARTITION "P_OLD"  VALUES LESS THAN (TO_DATE( 2015-01-01 00:00:00, SYYYY-MM-DD HH24:MI:SS, NL _CALENDAR=GREGORIAN))   TABLESPACE "TEST_DATA" ( SUBPARTITION "P_OLD_SP_ABC"  VALUES (abc)  TABLESPACE "TEST_DATA", 。。。  SUBPARTITION "P_OLD_SP_OTHER"  VALUES (xjzj, hij, pz)  TABLESPACE "TEST_DATA") ,

所以按照分区的定义,里面还是云服务器提供商少了这个subpartition的数值范围信息。

如果想重新生成一个新的subpartition可以使用如下的方式:

ALTER TABLE TLSTAT_NEWBG.DY_USER_ANALYSIS_MIN MODIFY PARTITION P_OLD add SUBPARTITION P_OLD_SP_OTHER_pz VALUES (pz);

如果想生成默认的subpartition名称可以使用如下的方式:

ALTER TABLE TLSTAT_NEWBG.DY_USER_ANALYSIS_MIN MODIFY PARTITION P2017_Q2 add SUBPARTITION VALUES (pz); 

这个时候的subpartition的信息,我摘录出一个来简单看看。

( SUBPARTITION "P2017_Q3_SP_ABC"  VALUES (abc)  TABLESPACE "TEST_DATA", 。。。  SUBPARTITION "P2017_Q3_SP_OTHER"  VALUES (xjzj, hij)    TABLESPACE "TEST_DATA",  SUBPARTITION "SYS_SUBP22"  VALUES (pz)  TABLESPACE "TEST_DATA") ,

如果依旧觉得不满意,我们来使用merge subpartitions的方式,当然这个操作还是会有全局锁的,会把两个分区整合为一个。

ALTER TABLE TLSTAT_NEWBG.DY_USER_ANALYSIS_MIN MERGE SUBPARTITIONS P2017_Q2_SP_OTHER,SYS_SUBP21 INTO SUBPARTITION P2017_Q2_SP_OTHER; 
本文地址:http://www.bzve.cn/html/567d64098792.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

硬盘Ghost分区教程(使用Ghost软件实现硬盘分区备份与还原,保障数据安全与稳定性)

以东之电脑的性能与可靠性评测(揭秘以东之电脑的亮点与优势)

探索95081的魅力(95081——一个拥有丰富文化和令人惊叹自然风光的地方)

技嘉760显卡评测——高性能游戏显卡的首选之一(解锁游戏潜力,技嘉760显卡给你极致畅玩体验)

飞利浦MP3SA0283音质如何?(揭秘飞利浦MP3SA0283的音质表现及特点)

华翼通信

探究欧拉手表的设计与功能(欧拉手表)

以木质手机壳怎么样?(结合自然与科技的完美融合)

友情链接

滇ICP备2023006006号-39