Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

77

积分

0

好友

0

主题
1#
发表于 2012-3-1 17:05:40 | 查看: 17692| 回复: 20
如何从附件中的TRACE文件分析出哪个对象坏块了?

==============================================================


trace 已经由maclean 压缩成 7z格式 便于 下载和保存, 原trace删除


crmint1_ora_6455750.7z (2.12 MB, 下载次数: 1108)
2#
发表于 2012-3-1 17:06:25

trace2

tracefile2

trace在一楼

回复 只看该作者 道具 举报

3#
发表于 2012-3-1 17:27:49
解压出来竟然将近1.8G....

[ 本帖最后由 回忆未来 于 2012-3-1 17:31 编辑 ]

未命名.jpg (79.12 KB, 下载次数: 516)

未命名.jpg

回复 只看该作者 道具 举报

4#
发表于 2012-3-1 17:59:38
最后100行?,怎么分析?

回复 只看该作者 道具 举报

5#
发表于 2012-3-1 19:24:21
这个trace 文件过于庞大了, 学习如何阅读trace 从 较小的size 开始。

回复 只看该作者 道具 举报

6#
发表于 2012-3-1 19:54:22
ODM Finding:
  1. /oracle/app1/oracle/admin/crmint/udump/crmint1_ora_6455750.trc
  2. Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
  3. With the Partitioning, Real Application Clusters, Data Mining and Real Application Testing options
  4. ORACLE_HOME = /oracle/app1/oracle/product/10.2.0/
  5. System name:    AIX
  6. Node name:      crm_int_db1
  7. Release:        3
  8. Version:        5
  9. Machine:        00C6E6644C00
  10. Instance name: crmint1
  11. Redo thread mounted by this instance: 1
  12. Oracle process number: 203
  13. Unix process pid: 6455750, image: oracle@crm_int_db1

  14. *** ACTION NAME:() 2012-02-24 23:30:18.472
  15. *** MODULE NAME:(NewBillTfjClientA@crmapp11 (TNS V1-V3)) 2012-02-24 23:30:18.472
  16. *** SERVICE NAME:(crmint) 2012-02-24 23:30:18.472
  17. *** SESSION ID:(2950.56667) 2012-02-24 23:30:18.472
  18. *** 2012-02-24 23:30:18.472
  19. ksedmp: internal or fatal error
  20. ORA-00600: internal error code, arguments: [25027], [7], [4063256], [], [], [], [], []
  21. Current SQL statement for this session:
  22. INSERT INTO TFJ_WORK_ORDER (ORDER_SERIAL_NBR, PROD_SPEC_ID, SERV_ID, ACC_NBR, ACTION, ORDER_STATE, SOURCE, CREATE_DATE, STATE, STATE_DATE, LATN_ID, BUREAU_ID, IF_QUOTA
  23. , PRIORITY, STAFF_ID, COMMENTS, AREA_ID, MDSE_SPEC_ID, SWD_ID, INSERT_DATE, EXCH_ID, HLR_NBR) SELECT A.ORDER_SERIAL_NBR, A.PROD_SPEC_ID, A.SERV_ID, DECODE(B.ACCOUNT_FL
  24. AG, 'N', A.ACC_NBR, 'Y', A.SERVICE_CODE), A.ACTION, A.ORDER_STATE, SOURCE, A.CREATE_DATE, '5SN', A.STATE_DATE, A.LATN_ID, A.BUREAU_ID, A.IF_QUOTA, A.PRIORITY, A.STAFF_
  25. ID, A.COMMENTS, A.AREA_ID, A.MDSE_SPEC_ID, A.SWD_ID, SYSDATE, A.EXCH_ID, A.HLR_NBR FROM WORK_ORDER A, TFJ_PROD_SPEC_CONFIG B WHERE A.ORDER_SERIAL_NBR = :B1 AND A.PROD_
  26. SPEC_ID = B.PROD_SPEC_ID
  27. ----- PL/SQL Call Stack -----
  28.   object      line  object
  29.   handle    number  name
  30. 7000004d9490230       218  procedure BASEJK.NEWBILLTFJSEND
  31. 70000060d968880         1  anonymous block
  32. ----- Call Stack Trace -----
  33. calling              call     entry                argument values in hex      
  34. location             type     point                (? means dubious value)     
  35. -------------------- -------- -------------------- ----------------------------
  36. ksedst+001c          bl       ksedst1              088404844 ? 041104844 ?
  37. ksedmp+0290          bl       ksedst               10453B3A8 ?
  38. ksfdmp+0018          bl       03F3AB94            
  39. kgeriv+0108          bl       _ptrgl               
  40. kgesiv+0080          bl       kgeriv               000000000 ? 000000002 ?
  41.                                                    000000000 ? 000000000 ?
  42.                                                    000000000 ?
  43. ksesic2+0060         bl       kgesiv               000000002 ? 11016E478 ?
  44.                                                    FFFFFFFFFFDE8F0 ? 1051018FC ?
  45.                                                    000024000 ?
  46. krtd2abh+040c        bl       ksesic2              61C3000061C3 ? 000000000 ?
  47.                                                    000000007 ? 000000000 ?
  48.                                                    0003E0018 ? 000000320 ?
  49.                                                    105101038 ? 000355D00 ?
  50. kcbget+1a84          bl       krtd2abh             1002A062C ? 10510156C ?
  51.                                                    0FFFFF7FF ? 1101FBD60 ?
  52.                                                    105101578 ?
  53. ktbxchg+0110         bl       kcbget               7000005E74A45F0 ? 000000000 ?
  54.                                                    FFFFFFFFFFE4660 ? 11019A468 ?
  55. kdifind+0f50         bl       ktbxchg              7000005E4A81590 ? 000000000 ?
  56.                                                    7000005E52CA508 ? 000000000 ?
  57. kdiins0+0cc4         bl       kdifind              389CB4C00000000 ?
  58.                                                    700000398AB08B0 ?
  59.                                                    FFFFFFFFFFE4660 ?
  60.                                                    FFFFFFFFFFDFD90 ?
  61.                                                    FFFFFFFFFFDF8E0 ? 000000000 ?
  62.                                                    000000000 ? 000000000 ?
  63. kdiinsp+0070         bl       kdiins0              700000398AB08A8 ? 104BBCFB0 ?
复制代码



10.2.0.4 on AIX 5.3

ORA-00600: internal error code, arguments: [25027], [7], [4063256], [], [], [], [], []

stack call kauxsin -> kdiinsp -> kdiins0 -> kdifind -> ktbxchg -> kcbget -> krtd2abh-> ksesic2-> kgesiv



ORA-600 [26027] Note:
  1. ORA-600 [25027] [ID 284433.1]

  2. PURPOSE:
  3.   This article represents a partially published OERI note.

  4.   It has been published because the ORA-600 error has been
  5.   reported in at least one confirmed bug.

  6.   Therefore, the SUGGESTIONS section of this article may help
  7.   in terms of identifying the cause of the error.

  8.   This specific ORA-600 error may be considered for full publication
  9.   at a later date. If/when fully published, additional information
  10.   will be available here on the nature of this error.

  11. ERROR:

  12.   Format: ORA-600 [25027] [a] [b]

  13. VERSIONS:
  14.   versions 9.2 and above

  15. ARGUMENTS:
  16.   Arg [a]  Tablespace Number (TSN)
  17.   Arg [b]  Decimal Relative Data Block Address (RDBA)

  18. SUGGESTIONS:

  19. 1. If the Arg [b] (the RDBA) is 0 (zero), then this could be due to fake indexes.

  20.   The following query will list fake indexes:

  21.      select do.owner,do.object_name, do.object_type,sysind.flags
  22.      from dba_objects do, sys.ind$ sysind
  23.      where do.object_id = sysind.obj#
  24.      and bitand(sysind.flags,4096)=4096;

  25. If the above query returns any rows, check the objects involved and consider
  26. dropping them as they can cause this error.

  27. 2. Run analyze table validate structure on the table referenced in the Current SQL statement in
  28.     the related trace file.

  29.   If the Known Issues section below does not help in terms of identifying
  30.   a solution, please submit the trace files and alert.log to Oracle
  31.   Support Services for further analysis.
复制代码

回复 只看该作者 道具 举报

7#
发表于 2012-3-1 20:26:18
ORA-00600: internal error code, arguments: [25027], [7], [4063256], [], [], [], [], []

Arg a  Tablespace Number (TSN)                               => 7
Arg b  Decimal Relative Data Block Address (RDBA)             => 4063256

GLOBAL CACHE ELEMENT DUMP (address: 700000441fd1cd0):
  id1: 0x74c51 id2: 0x300000 obj: 265103 block: (48/478289)



  LIST OF BUFFERS LINKED TO THIS GLOBAL CACHE ELEMENT:
    flg: 0x02002001 state: XCURRENT mode: EXCL
      pin: 'kdiwh22: kdifind'
      addr: 700000211efe018 obj: 265103 cls: DATA bscn: 0xb87.8e06d715
          buffer tsn: 7 rdba: 0x0c074c51 (48/478289)
          scn: 0x0b87.8e06d715 seq: 0x01 flg: 0x00 tail: 0xd7150601
          frmt: 0x02 chkval: 0x0000 type: 0x06=trans data

Block header dump:  0x0c074c51
Object id on Block? Y
seg/obj: 0x40b8f  csc: 0xb87.8e06d715  itc: 0  flg: O  typ: 2 - INDEX
     brn: 8  bdba: 0xc074a8a ver: 0x01 opc: 112
     inc: 0  exflg: 0

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc

Branch block dump


Branch block dump
=================
header address 504403167140642868=0x700000211000034
kdxcolev 2
KDXCOLEV Flags = - - -
kdxcolok 0
kdxcoopc 0x0: opcode=0: iot flags=--- is converted=-
kdxconco 251
kdxcosdc 1312293376
kdxconro -32768
kdxcofbo 2902=0xb56
kdxcofeo -28623=0xffff9031
kdxcoavs 1472
kdxbrlmc 4063256=0x3e0018
kdxbrsno 94
.....................
row#1015[16] dba: 4063256=0x3e0018

row#27[16384] **** invalid row offset ****           => 说明偏移量不正确,逻辑讹误
row#28[8032] dba: 16777921=0x10002c1        =》偏移量不正确会导致row header的dba 不正确





kdxbrlmc 4063256=0x3e0018

kdxbrlmc 是小于本branch block 中row# 0的值的 branch block的 rdba address




kdxcolev: index level (0 represents leaf blocks)
kdxcolok: denotes whether structural block transaction is occurring
kdxcoopc: internal operation code
kdxconco: index column count
kdxcosdc: count of index structural changes involving block
kdxconro: number of index entries (does not include kdxbrlmc pointer)
kdxcofbo: offset to beginning of free space within block
kdxcofeo: offset to the end of free space (ie. first portion of block containing index data)
kdxcoavs: available space in block (effectively area between the two fields above)
kdxbrlmc: block address if index value is less than the first (row#0) value
kdxbrsno: last index entry to be modified
kdxbrbksz: size of usable block space




以上dump了 file# 48  block# 478289, 该块属于一个索引 对象号obj_number  为 0x40b8f = 265103

该块可能存在逻辑讹误(logical corruption) ,提供了错误的偏移量, 这导致 branch block中记录的DBA存在错误,从而引发ORA-600[25027]错误:
  1. Ora-600 [25027] While Inserting Into a Table [ID 560103.1]

  2. Applies to:
  3. Oracle Server - Enterprise Edition - Version: 10.1.0.2 to 10.2.0.4 - Release: 10.1 to 10.2
  4. Information in this document applies to any platform.
  5. Checked for relevance on 22-Feb-2012
  6. Symptoms
  7. While inserting into a table ORA-00600 [25027][177][0] is encountered.
  8. Cause

  9. One of the table indexes is corrupted.

  10. The following is found in the ORA-600 [25027] trace file.
  11. Current SQL statement for this session:
  12. INSERT
  13. INTO
  14. dtktgt.loc_meas_dly_pull
  15. .....
  16. Block header dump: 0x0b823083
  17. Object id on Block? Y
  18. seg/obj: 0x4c1cec csc: 0x08.20c997dd itc: 0 flg: O typ: 2 - INDEX
  19. brn: 0 bdba: 0x0 ver: 0x01 opc: 80
  20. inc: 0 exflg: 0

  21. Itl Xid Uba Flag Lck Scn/Fsc

  22. Branch block dump
  23. =================
  24. header address 17620123700=0x41a3dc034
  25. kdxcolev 9
  26. KDXCOLEV Flags = R T -
  27. kdxcolok 0
  28. kdxcoopc 0x0: opcode=0: iot flags=--- is converted=-
  29. kdxconco 224
  30. kdxcosdc 4022075648
  31. kdxconro -16384
  32. kdxcofbo 8=0x8
  33. kdxcofeo 8393=0x20c9
  34. kdxcoavs 20868
  35. kdxbrlmc 0=0x0
  36. kdxbrsno 0
  37. -16384 exceeds Max number of rows
  38. row#0[0] **** invalid row offset ****
  39. row#1[0] **** invalid row offset ****

  40. The last three lines should not be there in a valid block and show that the contents of the block have been corrupted.
  41. Solution

  42. 1) SQL> Analyze table <name> validate structure cascade ;

  43. 2) query dba_indexes to get all indexes for failed table 'table_name'

  44.     SQL> select index_name from user_indexes where table_name = 'TABLE_NAME';

  45. 3) validate table indexes :
  46.     SQL > Analyze index <index name > validate structure ;

  47. If the analyze indicates corruption and that corruption is within an index, drop and recreate the index.
复制代码
建议你使用 Analyze index <index name > validate structure ;分析 bj_number  为 0x40b8f = 265103的索引, 验证索引结构,  若确认存在讹误, 则重建索引( drop 后再build , rebuild 可能无法cover 逻辑讹误)。

回复 只看该作者 道具 举报

8#
发表于 2012-3-1 23:19:16
谢谢刘老大,非常专业,事实证明在这里提问比MOS更加快,回答更加专业。我还有一个问题,刚开始我也是差MOS得到DOC ORA-600 [25027] [doc ID 284433.1],说ORA-600 [25027] [a] 中的是RDBA,然后就用dbms_utility去convert,但是结果得到file_id=0,这明显不符合,就疑惑了,难道doc ID 284433.1 有错?
-------
PURPOSE:
  This article represents a partially published OERI note.

  It has been published because the ORA-600 error has been
  reported in at least one confirmed bug.

  Therefore, the SUGGESTIONS section of this article may help
  in terms of identifying the cause of the error.

  This specific ORA-600 error may be considered for full publication
  at a later date. If/when fully published, additional information
  will be available here on the nature of this error.

ERROR:

  Format: ORA-600 [25027] [a]

VERSIONS:
  versions 9.2 and above

ARGUMENTS:
  Arg [a]  Tablespace Number (TSN)
  Arg   Decimal Relative Data Block Address (RDBA)

回复 只看该作者 道具 举报

9#
发表于 2012-3-2 13:12:32
“DOC ORA-600 [25027] [doc ID 284433.1],说ORA-600 [25027] [a] 中的是RDBA,然后就用dbms_utility去convert,但是结果得到file_id=0,这明显不符合,就疑惑了,难道doc ID 284433.1 有错?”



  Arg  b Decimal Relative Data Block Address (RDBA)   4063256 =>0x3E0018

Oracle中最小的RDBA是 1号文件上的数据块

buffer tsn: 0 rdba: 0x00400009 (1/9)        =》 1号文件第9个块 为 0x400009

1号文件第一个块为0x400001

0x400000  》 0x3E0018,  显然说明了0x3E0018 这个RDBA是讹误后的结果。

回复 只看该作者 道具 举报

10#
发表于 2012-3-2 14:15:45
刘总

stack call kauxsin -> kdiinsp -> kdiins0 -> kdifind -> ktbxchg -> kcbget -> krtd2abh-> ksesic2-> kgesiv
这块是从那得到的?这些都是干啥啊

回复 只看该作者 道具 举报

11#
发表于 2012-3-2 14:33:59

回复 10# 的帖子

一般600 trace的开头部分就会有stack call trace, 如他的trace里:

----- Call Stack Trace -----
calling              call     entry                argument values in hex      
location             type     point                (? means dubious value)     
-------------------- -------- -------------------- ----------------------------
ksedst+001c          bl       ksedst1              088404844 ? 041104844 ?
ksedmp+0290          bl       ksedst               10453B3A8 ?
ksfdmp+0018          bl       03F3AB94            
kgeriv+0108          bl       _ptrgl               
kgesiv+0080          bl       kgeriv               000000000 ? 000000002 ?
                                                   000000000 ? 000000000 ?
                                                   000000000 ?
ksesic2+0060         bl       kgesiv               000000002 ? 11016E478 ?
                                                   FFFFFFFFFFDE8F0 ? 1051018FC ?
                                                   000024000 ?
krtd2abh+040c        bl       ksesic2              61C3000061C3 ? 000000000 ?
                                                   000000007 ? 000000000 ?
                                                   0003E0018 ? 000000320 ?
                                                   105101038 ? 000355D00 ?
kcbget+1a84          bl       krtd2abh             1002A062C ? 10510156C ?
                                                   0FFFFF7FF ? 1101FBD60 ?
                                                   105101578 ?
ktbxchg+0110         bl       kcbget               7000005E74A45F0 ? 000000000 ?
                                                   FFFFFFFFFFE4660 ? 11019A468 ?
kdifind+0f50         bl       ktbxchg              7000005E4A81590 ? 000000000 ?



注意看每一个function 的顺序, 是从下到上的, 最上部的function kge部分是无意义的 ,他们是 oracle 错误机制的代码。

可以参考ORA-00600: http://www.oracledatabase12g.com/archives/ora-00600.html


关于Unix 上的stack call你可以 去读一下 <unix环境高级编程>这本书

回复 只看该作者 道具 举报

12#
发表于 2012-3-2 14:34:55
还有
block# 478289-这个块号是根据4063256的出来的吗?


row#28[8032] dba: 16777921=0x10002c1        =》偏移量不正确会导致row header的dba 不正确
kdxbrlmc 4063256=0x3e0018
kdxbrlmc 是小于本branch block 中row# 0的值的 branch block的 rdba address-----这一段还不是很明白
望刘总解答,多谢

回复 只看该作者 道具 举报

13#
发表于 2012-3-2 14:37:46

回复 12# 的帖子

kdxbrlmc: block address if index value is less than the first (row#0) value 你可以理解为上一个branch block的 block address

回复 只看该作者 道具 举报

14#
发表于 2012-3-3 23:40:57
谢谢刘老大

回复 只看该作者 道具 举报

15#
发表于 2012-7-4 15:30:59
哇咔咔~~终于在这里找到了,还让我纠结了很久~~这个经典的帖子我的好好嚼嚼~~~~

回复 只看该作者 道具 举报

16#
发表于 2012-7-4 15:32:51

回复 11# 的帖子

关于Unix 上的stack call你可以 去读一下 <unix环境高级编程>这本书~~
这个trace文件里面的调用就是os层面的知识是吧??刘大能不能就这个<unix环境高级编程>简单讲解一二~~

回复 只看该作者 道具 举报

17#
发表于 2012-7-27 14:46:48

回复 11# 的帖子

hi
Ml
   我按照你的
http://www.oracledatabase12g.com/archives/ora-00600.html
方法去(和你帖子一样的stack call)
metalink
搜索
对应的call stack 没有没有记录呢?

回复 只看该作者 道具 举报

18#
发表于 2012-7-27 21:54:04

回复 17# 的帖子

你选择的搜索范围是什么?

回复 只看该作者 道具 举报

19#
发表于 2012-7-30 09:21:31
选择的范围是这样的
ksedst()+40
ksedmp()+168
ksfdmp()+32
kgerinv()+152
kgeasnmierr()+88
kcbassertbd3()+204
kcbz_check_objd_typ
kcbzib()+
kcbgtcr()+
ktecgsc()+168
ktecgetsh()+196
ktecgshx()+40
kteinicnt1()+648
ktssdrbm_segment()+
ktssdro_segment()+3
ktssdt_segs()+1128
ktmmon()+3500
ktmSmonMain()+64
ksbrdp()+1276
opirip()+
opidrv()+1088
sou2o()+120
opimai_real()+496
main()+240
$START$()+

回复 只看该作者 道具 举报

20#
发表于 2012-7-30 10:17:31
我在这篇文章里说明了  http://www.oracledatabase12g.com/archives/ora-00600.html


"ksedst()+40
ksedmp()+168
ksfdmp()+32
kgerinv()+152
kgeasnmierr()+88
kcbassertbd3()+204
kcbz_check_objd_typ
kcbzib()+
kcbgtcr()+
ktecgsc()+168
ktecgetsh()+196
ktecgshx()+40
kteinicnt1()+648
ktssdrbm_segment()+
ktssdro_segment()+3
ktssdt_segs()+1128
ktmmon()+3500
ktmSmonMain()+64
ksbrdp()+1276
opirip()+
opidrv()+1088
sou2o()+120
opimai_real()+496
main()+240
$START$()+

注意以上stack call中 只有 ktmSmonMain -> kcbassertbd3 这部分是有意义的, 开始部分的main()-> ksbrdp() 是很普通的入口函数 , 而从kgeasnmierr (Kernel generic Error ) 开始的代码是Oracle 报错层使用的函数 , 都是对定位问题没有帮助的。 将这部分有用的stack call 填入Metalink <ORA-600/ORA-7445 Error Look-up Tool [ID 153788.1]> 600问题诊断页面的 stack call 栏 会以较严格的筛选条件找出问题相关的Note:"



你上面的stack call 中 只有 ksbrdp => kcbassertbd3 这部分是有意义的


最下面 main() 到opirip 是程序的入口 ,每个 stack call几乎有这样


kgeasnmierr=> 是负责 报错的函数

回复 只看该作者 道具 举报

21#
发表于 2012-7-30 10:50:22
不好意思 ML
  trace stack copy错了
如下图
请帮忙 谢谢

查询的.jpg (83.6 KB, 下载次数: 506)

查询的.jpg

结果.jpg (31.48 KB, 下载次数: 492)

结果.jpg

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-12-25 15:01 , Processed in 0.061200 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569