iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Oracle分区数据问题的分析和修复是怎样的
  • 437
分享到

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

2024-04-02 19:04:59 437人浏览 安东尼
摘要

oracle分区数据问题的分析和修复是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 今天根据同事的反馈,处理了一个分区表的问题,也让

oracle分区数据问题的分析和修复是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

今天根据同事的反馈,处理了一个分区表的问题,也让我对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分区,基本就是数值范围或者是日期来做范围分区,这个问题该怎么理解呢,如果按照时间分区,那么另外一个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
S_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;

看完上述内容,你们掌握Oracle分区数据问题的分析和修复是怎样的的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网数据库频道,感谢各位的阅读!

您可能感兴趣的文档:

--结束END--

本文标题: Oracle分区数据问题的分析和修复是怎样的

本文链接: https://www.lsjlt.com/news/65846.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle怎么显示表的字段
    如何显示 oracle 表的字段 在 Oracle 数据库中,可以使用 DESC 命令显示表的字段。 语法: DESC table_name 参数: table_name:要显示字段的表...
    99+
    2024-05-14
    oracle
  • oracle怎么看所有的表
    在 oracle 数据库中查看所有表的步骤:连接到数据库运行查询:select table_name from user_tables; 如何使用 Oracle 查看所有表 ...
    99+
    2024-05-14
    oracle
  • oracle怎么显示行数
    如何使用 oracle 显示行数 在 Oracle 数据库中,有两种主要方法可以显示行数: 1. 使用 COUNT 函数 SELECT COUNT(*) FROM table_n...
    99+
    2024-05-14
    oracle
  • oracle怎么显示百分比
    oracle中显示百分比的方法有:使用百分号“%”;使用to_char()函数;使用format()函数(oracle 18c及更高版本);创建自定义函数。 Oracle 显...
    99+
    2024-05-14
    oracle
  • oracle怎么删除列
    oracle 中删除列的方法有两种:1)使用 alter table table_name drop column column_name 语句;2)使用 drop colum...
    99+
    2024-05-14
    oracle
  • sql怎么查看表的索引
    通过查询系统表,可以获取表的索引信息,包括索引名称、是否唯一、索引类型、索引列和行数。常用系统表有:mysql 的 information_schema.statistics、postg...
    99+
    2024-05-14
    mysql oracle
  • sql怎么查看索引
    您可以使用 sql 通过以下方法查看索引:show indexes 语句:显示表中定义的索引列表及其信息。explain 语句:显示查询计划,其中包含用于执行查询的索引。informat...
    99+
    2024-05-14
  • sql怎么查看存储过程
    如何查看 sql 存储过程的源代码:使用 show create procedure 语句直接获取创建脚本。查询 information_schema.routines 表的 routi...
    99+
    2024-05-14
  • sql怎么查看视图表
    要查看视图表,可以使用以下步骤:使用 select 语句获取视图中的数据。使用 desc 语句查看视图的架构。使用 explain 语句分析视图的执行计划。使用 dbms 提供...
    99+
    2024-05-14
    oracle python
  • sql怎么查看创建的视图
    可以通过sql查询查看已创建的视图,具体步骤包括:连接到数据库并执行查询select * from information_schema.views;查询结果将显示视图的名称、...
    99+
    2024-05-14
    mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作