ITPUB??ì3
2010数据库技术大会
ITPUB论坛 » Oracle数据库管理 » 一次ora-01438错误的处理


您有 2 条公共消息
  • 来自: 公共消息 标题: 3-5月ITPUB数据库 ... 内容: ITPUB与3月和5月分别安排了Oracle 11g DBA和Oracle性能优化培训,以及 ...
  • 来自: 公共消息 标题: ITPUB邮箱已经恢复 内容: ITPUB邮箱用户请注意,邮箱现在已经恢复 web访问地址 http://emai ...

    标题: [精华] 一次ora-01438错误的处理
    本帖已经被作者加入个人空间
    在线/呼叫 l_niu
    海之鱼


    精华贴数 6
    个人空间 50
    技术积分 3948 (444)
    社区积分 11743 (173)
    注册日期 2002-7-15
    论坛徽章:12
    管理团队成员2010新春纪念徽章    
          

    发表于 2008-3-19 10:16 
    一次ora-01438错误的处理

    昨天数据库出了个问题,俺这个非专业摸索了半天,终于解决了,把过程罗列出来,希望有人能用得上。
    一、问题概述
    在进行数据库例行维护时,遇到数据库正常导出,但导入时遇到有张表不能导入的问题。这张表存储工艺路线,大约共有160万条记录。表的不能导入影响一部分功能的实现,各单位反映强烈。
    数据库系统:oracle 10.2.0.1 64bit for linux
    操作系统:redhat 4 64bit
    二、初步分析
    首先排除是系统bug所带来的问题,因为前期导入导出未发现问题;另外由于是对同一数据库进行的导入导出,也排除了字符集问题。
    单独再次导入此表,出现错误如下;
    [oracle@zhx25 ~]$ imp system/ceshi fromuser=dba_mgr touser=dba_mgr tables=t_routdef ignore=y file=1.dmp

    Import: Release 10.2.0.1.0 - Production on Tue Mar 18 14:19:49 2008

    Copyright (c) 1982, 2005, Oracle.All rights reserved.

    Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP and Data Mining options

    Export file created by EXPORT:V10.02.01 via conventional path
    import done in ZHS16GBK character set and ZHS16GBK NCHAR character set
    . importing DBA_MGR's objects into DBA_MGR
    . . importing table "T_ROUTDEF"
    IMP-00058: ORACLE error 1438 encountered
    ORA-01438: value larger than specified precision allowed for this column
    IMP-00028: partial import of previous table rolled back: 20501 rows rolled back

    解决方向:有可能是数据中存在问题,很有可能是输入一些特殊字符,这些字符和ORACLE自身使用的通配符一致,所以导致系统不能识别。
    三、问题解决
    1、对问题进行跟踪
    对系统设置1438 errorstack跟踪:
    SQL> alter system set events='1438 trace name Errorstack forever,level 10';
    System altered
    然后重新执行IMP
    2、查看UDUMP下日志,如下:
    /opt/oracle/admin/orcl/udump/orcl_ora_32355.trc
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP and Data Mining options
    ORACLE_HOME = /opt/oracle/product/10.2.0
    System name:Linux
    Node name:zhx25.cccc.com
    Release:2.6.9-22.ELsmp
    Version:#1 SMP Mon Sep 19 18:00:54 EDT 2005
    Machine:x86_64
    Instance name: orcl
    Redo thread mounted by this instance: 1
    Oracle process number: 17
    Unix process pid: 32355, image: oracle@zhx25.cccc.com (TNS V1-V3)

    *** SERVICE NAMESYS$USERS) 2008-03-18 17:11:02.014
    *** SESSION ID135.949) 2008-03-18 17:11:02.014
    *** 2008-03-18 17:11:02.014
    ksedmp: internal or fatal error
    ORA-01438: value larger than specified precision allowed for this column
    Current SQL statement for this session:
    INSERT /*+NESTED_TABLE_SET_REFS+*/ INTO "T_ROUTDEF" ("PRTNO", "SEQNO", "SEQDESC", "PRTEFLAG", "SEQCC", "SEQNXTNO", "SEQDEPT", "WKCCODE", "WKCALTCODE", "SEQSETHR", "LAB_SEQSETHR", "SEQRUNHR", "LAB_SEQRUNHR", "SEQQUEHR", "LAB_SEQQUEHR", "SEQTRANHR", "LAB_SEQTRANHR", "SEQNOQLTRAT", "SEQCHGDAT", "SEQCHGRSN", "SEQCHGCTLR", "MACHCODE", "MACHALTCODE", "RESCODE", "KEYSEQ", "SEQCRYLOT", "INITOVERRATE", "COMWORK", "SEQLOTFLAG", "SEQEFDAT", "SEQIEFDAT", "SEQEFLOTNO", "SEQIEFLOTNO", "SEQECONO", "PRTSEQCST", "SEQSELFCST", "INVYORN", "SEQQTY", "SEQNOTE", "NOPRTAVELZ", "OUTSEQFLAG", "WXCST", "SEQGSCHGCTLR", "SEQGSCHGDAT", "SEQSHCTL", "SEQSHDAT", "SEQSHSIGN", "PRICE", "ACCNO", "ROUSTAT", "FIXMFLAG", "BANCL" VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15, :16, :17, :18, :19, :20, :21, :22, :23, :24, :25, :26, :27, :28, :29, :30, :31, :32, :33, :34, :35, :36, :37, :38, :39, :40, :41, :42, :43, :44, :45, :46, :47, :48, :49, :50, :51, :52)
    ----- Call Stack Trace -----
    calling
    call
    entry
    argument values in hex

    location
    type
    point
    (? means dubious value)


    …………


    oacdef = 6a9477a0
    Offsi = 48, Offsi = 1440


    Opcode = 2
    Bind Twotask Scalar Sql In (may be out) Copy


    oacdef = 6a9477d0
    Offsi = 48, Offsi = 1472


    Opcode = 2
    Bind Twotask Scalar Sql In (may be out) Copy


    oacdef = 6a947800
    Offsi = 48, Offsi = 1504


    Opcode = 2
    Bind Twotask Scalar Sql In (may be out) Copy


    oacdef = 6a947830
    Offsi = 48, Offsi = 1536


    Opcode = 2
    Bind Twotask Scalar Sql In (may be out) Copy


    oacdef = 6a947860
    Offsi = 48, Offsi = 1568


    Opcode = 2
    Bind Twotask Scalar Sql In (may be out) Copy


    oacdef = 6a947890
    Offsi = 48, Offsi = 1600


    Opcode = 2
    Bind Twotask Scalar Sql In (may be out) Copy


    oacdef = 6a9478c0
    Offsi = 48, Offsi = 1632

    kkscoacd

    Bind#0


    oacdty=01 mxl=32(24) mxlc=00 mal=00 scl=00 pre=00


    oacflg=03 fl2=1000010 frm=01 csi=852 siz=3344 off=0


    kxsbbbfp=2a974dc398
    bln=32
    avl=23
    flg=05


    value="?




    Bind#1


    oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00


    oacflg=03 fl2=1000000 frm=00 csi=00 siz=0 off=32


    kxsbbbfp=2a974dc3b8
    bln=22 avl=22 flg=01


    value=###


    An invalid number has been seen.Memory contents are :

    Dump of memory from 0x0000002A974CDE88 to 0x0000002A974CDE9E
    2A974CDE80 3331312E 0406C102 [.113....]
    2A974CDE90 C9BBC6C8 52024D01 30310248 00003304[.....M.RH.10.3..]

    Bind#2


    oacdty=01 mxl=32(30) mxlc=00 mal=00 scl=00 pre=00


    oacflg=03 fl2=1000010 frm=01 csi=852 siz=0 off=56


    kxsbbbfp=2a974dc3d0
    bln=32
    avl=00
    flg=01


    Bind#3


    oacdty=01 mxl=32(01) mxlc=00 mal=00 scl=00 pre=00


    oacflg=03 fl2=1000010 frm=01 csi=852 siz=0 off=88


    kxsbbbfp=2a974dc3f0
    bln=32
    avl=01
    flg=01


    value="M"

    …………
    从跟踪文件可以看到,问题是系统认为地址为2A974CDE88的数值非法,在导入会提示ora-1438错误。本值在数据库中定义为number(8)类型,但从结果来看,系统把这个值当成了number(24)类型,并且由于格式不对,不能取出值。
    3、找到DMP中相关数据
    winhex打开dmp文件,搜索十六进制串“2E313133 02C10604 C8C6BBC9 014D0252 48023130 0433F3FF”(对trace文件中的值要进行顺序调整),结果如下图:

    4、对导出数据进行更改
    由于“2E313133 02C10604 C8C6BBC9 014D0252 48023130 0433F3FF”不是一个有效的number类型,需要对它进行调整。调整如下,只要确保调整的值是number类型的即可。

    5、对数据库相关数据项的类型进行调整
    把数据项的类型由number(*)改为number(38)
    6、重新进行数据导入
    [oracle@zhx25 ~]$ imp system/ceshi fromuser=dba_mgr touser=dba_mgr tables=t_routdef ignore=y file=1.dmp

    Import: Release 10.2.0.1.0 - Production on Tue Mar 18 14:19:49 2008

    Copyright (c) 1982, 2005, Oracle.
    All rights reserved.


    Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP and Data Mining options

    Export file created by EXPORT:V10.02.01 via conventional path
    import done in ZHS16GBK character set and ZHS16GBK NCHAR character set
    . importing DBA_MGR's objects into DBA_MGR
    . . importing table
    "T_ROUTDEF"
    1646404

    导入成功。


    [ 本帖最后由 l_niu 于 2008-3-19 10:21 编辑 ]


    __________________
    每天要保持积极向上的心情!  You can win if you want!
    只看该作者    顶部
    离线 john_77
    一般会员



    精华贴数 0
    个人空间 0
    技术积分 1151 (1930)
    社区积分 30 (7689)
    注册日期 2003-8-4
    论坛徽章:12
    授权会员     
          

    发表于 2008-3-19 11:00 
    学习了,以后说不定用的上


    只看该作者    顶部
    在线/呼叫 棉花糖ONE


    精华贴数 0
    个人空间 48
    技术积分 22061 (54)
    社区积分 1623 (883)
    注册日期 2007-2-21
    论坛徽章:83
    现任管理团队成员2010新春纪念徽章2010年世界杯参赛球队:巴拉圭   
          

    发表于 2008-4-2 14:59 
    3、找到DMP中相关数据
    用winhex打开dmp文件,搜索十六进制串“2E313133 02C10604 C8C6BBC9 014D0252 48023130 0433F3FF”

    请教下楼主,这步是怎么得来的,从哪里看出要搜出这些字符串


    __________________
    只看该作者    顶部
    在线/呼叫 zuohao_lu
    one people.a road!


    来自 山里
    精华贴数 0
    个人空间 631
    技术积分 7445 (225)
    社区积分 23627 (79)
    注册日期 2007-11-13
    论坛徽章:80
    迈阿密热火迈阿密热火迈阿密热火   
          

    发表于 2008-4-2 15:35 
    收藏下.


    __________________
    每天认真追求理想
    只看该作者    顶部
    在线/呼叫 棉花糖ONE


    精华贴数 0
    个人空间 48
    技术积分 22061 (54)
    社区积分 1623 (883)
    注册日期 2007-2-21
    论坛徽章:83
    现任管理团队成员2010新春纪念徽章2010年世界杯参赛球队:巴拉圭   
          

    发表于 2008-4-2 15:47 
    顶下


    __________________
    只看该作者    顶部
    在线/呼叫 l_niu
    海之鱼


    精华贴数 6
    个人空间 50
    技术积分 3948 (444)
    社区积分 11743 (173)
    注册日期 2002-7-15
    论坛徽章:12
    管理团队成员2010新春纪念徽章    
          

    发表于 2008-4-2 22:30 


    QUOTE:
    原帖由 棉花糖ONE 于 2008-4-2 14:59 发表
    3、找到DMP中相关数据
    用winhex打开dmp文件,搜索十六进制串“2E313133 02C10604 C8C6BBC9 014D0252 48023130 0433F3FF”

    请教下楼主,这步是怎么得来的,从哪里看出要搜出这些字符串

    在udump文件中可找到下图的内容,画圈的就是这些字串,其中value=###的就是不能正确识别的数据项

    [ 本帖最后由 l_niu 于 2008-4-2 22:32 编辑 ]




    l_niu 上传了这个附件:
    2008-4-2 22:30
    未命名.GIF (7.07 KB)
     

    __________________
    每天要保持积极向上的心情!  You can win if you want!
    只看该作者    顶部
    在线/呼叫 zergduan
    SE-RequieM


    来自 Beijing Massage Center
    精华贴数 0
    个人空间 441
    技术积分 13596 (103)
    社区积分 18 (9845)
    注册日期 2005-5-16
    论坛徽章:42
    现任管理团队成员ITPUB元老2010新春纪念徽章   
          

    发表于 2008-4-2 22:49 
    佩服~


    __________________
    只看该作者    顶部
    在线/呼叫 zergduan
    SE-RequieM


    来自 Beijing Massage Center
    精华贴数 0
    个人空间 441
    技术积分 13596 (103)
    社区积分 18 (9845)
    注册日期 2005-5-16
    论坛徽章:42
    现任管理团队成员ITPUB元老2010新春纪念徽章   
          

    发表于 2008-4-2 23:01 
    lz,说实话我一点都没看懂....
    1.从跟踪文件可以看到,问题是系统认为地址为2A974CDE88的数值非法,在导入会提示ora-1438错误。本值在数据库中定义为number(8)类型,但从结果来看,系统把这个值当成了number(24)类型,并且由于格式不对,不能取出值。
    能给讲讲,你怎么看出oracle把这个值当成了number(24)了么?
    2.在udump文件中可找到下图的内容,画圈的就是这些字串,其中value=###的就是不能正确识别的数据项
    你花圈的地方怎么就算出十六进制串“2E313133 02C10604 C8C6BBC9 014D0252 48023130 0433F3FF”
    了?

    看着跟天书一样...


    __________________
    只看该作者    顶部
    离线 bluemoon0083
    大表哥


    精华贴数 2
    个人空间 0
    技术积分 8501 (199)
    社区积分 69 (5149)
    注册日期 2005-12-29
    论坛徽章:22
    会员2007贡献徽章授权会员2010新春纪念徽章2010新春纪念徽章祖国60周年纪念徽章2009日食纪念
    2009新春纪念徽章生肖徽章2007版:狗ITPUB新首页上线纪念徽章数据库板块每日发贴之星  

    发表于 2008-4-2 23:19 
    有些问题不懂问下哈

    3、找到DMP中相关数据
    用winhex打开dmp文件,搜索十六进制串“2E313133 02C10604 C8C6BBC9 014D0252 48023130 0433F3FF”(对trace文件中的值要进行顺序调整)

    --这里的值为什么是反过来的?dump出来的东西都要反过来看吗?

    4、对导出数据进行更改
    由于“2E313133 02C10604 C8C6BBC9 014D0252 48023130 0433F3FF”不是一个有效的number类型,需要对它进行调整。调整如下,只要确保调整的值是number类型的即可。

    --这里如何修改,修改后的值是什么样子的?另外修改完之后就用winhex保存一下就可以了就能直接imp成功了?

    --另外发生这样的情况一般说明是dmp文件corrupt了?你这个情况就是坏了那一个地方,改一下就行了,如果很多地方都是value=###,这个时候应该就不适合手工来改了?


    __________________
    paper oracle apps dba.....
    只看该作者    顶部
    在线/呼叫 棉花糖ONE


    精华贴数 0
    个人空间 48
    技术积分 22061 (54)
    社区积分 1623 (883)
    注册日期 2007-2-21
    论坛徽章:83
    现任管理团队成员2010新春纪念徽章2010年世界杯参赛球队:巴拉圭   
          

    发表于 2008-4-2 23:26 
    value=###这个我也trace到了,但是后面的2E313133 02C10604 C8C6BBC9 014D0252 48023130 0433F3FF 这些怎么得到的,以及最后是如何改的,希望楼主能说下更具体的过程,还有改了后这个column的数据应该是会没了吧


    __________________
    只看该作者    顶部
    相关内容


    CopyRight 1999-2006 itpub.net All Right Reserved.
    北京皓辰网域网络信息技术有限公司. 版权所有
    E-mail:Webmaster@itpub.net
    网站律师 隐私政策 知识产权声明
    京ICP证:060528号 联系我们