Oracle索引修复 ,ORA-00600: internal error code, arguments: [6200],

Oracle索引修复 ,ORA-00600: internal error code, arguments: [6200],

问题背景:客户反馈DB每天产生的incident日志很多,需要排查原因

查看alert日志发现大量的ORA-07445、ORA-00600错误

 

Oracle索引修复 ,ORA-00600: internal error code, arguments: [6200],
 1 Errors in file /data/oracle/diag/rdbms/bydata/bydata/trace/bydata_mmon_3667.trc  (incident=111052):
 2 
 3 ORA-00600: internal error code, arguments: [6200], [18446744073709551615], [], [], [], [], [], [], [], [], [], []
 4 
 5 Exception [type: SIGSEGV, SI_KERNEL(general_protection)] [ADDR:0x0] [PC:0x2278EA1, kghstack_err()+85] [flags: 0x0, count: 1]
 6 
 7 Errors in file /data/oracle/diag/rdbms/bydata/bydata/trace/bydata_mmon_3667.trc  (incident=111053):
 8 
 9 ORA-07445: exception encountered: core dump [kghstack_err()+85] [SIGSEGV] [ADDR:0x0] [PC:0x2278EA1] [SI_KERNEL(general_protection)] []
10 
11 ORA-00600: internal error code, arguments: [6200], [18446744073709551615], [], [], [], [], [], [], [], [], [], []
12 
13 Incident details in: /data/oracle/diag/rdbms/bydata/bydata/incident/incdir_111053/bydata_mmon_3667_i111053.trc
14 
15 Mon Oct 21 09:50:30 2019
Oracle索引修复 ,ORA-00600: internal error code, arguments: [6200],

 

 

一般情况下,ORA-600被证明为oracle的内部错误,通常由数据文件的坏块或者oracle的bug引起

首先查看是否有数据文件坏块

Oracle索引修复 ,ORA-00600: internal error code, arguments: [6200],
 1 [oracle@OA_oracle ~]$ dbv file =/data/oracle/oradata/bydata/SYSAUX01.DBF
 2 
 3 DBVERIFY: Release 11.2.0.1.0 - Production on Mon Oct 21 15:12:29 2019
 4 
 5 Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
 6 
 7  
 8 
 9 DBVERIFY - Verification starting : FILE = /data/oracle/oradata/bydata/SYSAUX01.DBF
10 
11 Block Checking: DBA = 8522163, Block Type = KTB-managed data block
12 
13 **** row 0: row length 35 past end of block
14 
15 **** row 0: row skipped so other stats may be wrong
16 
17 **** row 1: row length 7641 past end of block
18 
19 **** row 1: row skipped so other stats may be wrong
20 
21 **** row 2: row length 1002 past end of block
22 
23 **** row 2: row skipped so other stats may be wrong
24 
25 **** row 3: row length 1951 past end of block
26 
27 **** row 3: row skipped so other stats may be wrong
28 
29 **** row 4: row length 441 past end of block
30 
31 **** actual free space = -277001 < kdxcoavs = 29
32 
33 **** key (begin=0x594, len=1438) overlaps with another
34 
35         begin = 0x5ae len = 1428
36 
37 ---- end index block validation
38 
39 Page 133555 failed with check code 6401
40 
41  
42 
43  
44 
45 DBVERIFY - Verification complete
46 
47  
48 
49 Total Pages Examined         : 144640
50 
51 Total Pages Processed (Data) : 47272
52 
53 Total Pages Failing   (Data) : 0
54 
55 Total Pages Processed (Index): 39600
56 
57 Total Pages Failing   (Index): 1       ---需要留意
58 
59 Total Pages Processed (Lob)  : 9592
60 
61 Total Pages Failing   (Lob)  : 0
62 
63 Total Pages Processed (Other): 26419
64 
65 Total Pages Processed (Seg)  : 0
66 
67 Total Pages Failing   (Seg)  : 0
68 
69 Total Pages Empty            : 21757
70 
71 Total Pages Marked Corrupt   : 0
72 
73 Total Pages Influx           : 0
74 
75 Total Pages Encrypted        : 0
76 
77 Highest block SCN            : 296083261 (0.296083261)
Oracle索引修复 ,ORA-00600: internal error code, arguments: [6200],

 

这次检查的有可能存在讹误索引的数据文件是sysaux,对于系统文件无法通过重建索引处理,建议客户重新恢复一个库

 

2> 如何在ORA-600 [6200] 报错中定位讹误的索引

描述:

在访问某张表时,你遇到ORA-600 [6200]报错,这个报错意味着相关索引被探测到存在讹误。

标准的解决方法是drop掉索引并为这张表重建所有相关索引。

不过,我们可以从trace文件当时生成的报错中定位哪个索引出的问题。

 

例如:

例子中显示的是从trace文件中看到的索引报错信息。

    trace file报错信息:

 

Oracle索引修复 ,ORA-00600: internal error code, arguments: [6200],
 1       ksedmp: internal or fatal error
 2 
 3       ORA-00600: internal error code, arguments: [6200], [260], [262], [], [], [], [], []
 4 
 5      
 6 
 7       Block header dump: dba: 0x7b404757
 8 
 9        Object id on Block? Y
10 
11        seg/obj: 0x6190 csc: 0x00.4e537b5  itc: 2  flg: -typ: 2 - INDEX
12 
13            fsl: 0  fnx: 0x0 
Oracle索引修复 ,ORA-00600: internal error code, arguments: [6200],

 

 

    注意这里seg/obj指出的Hex值,我们可以将其转为十进制值,这个值就是对象id号。

    0x6190 也就是24976   Hex = 00006190  Octal = 00000060620

    这样我们就能在DBA_OBJECTS视图中找到索引对象了.

Oracle索引修复 ,ORA-00600: internal error code, arguments: [6200],
 1     SVRMGR> SELECT OBJECT_ID, OBJECT_NAME FROM DBA_OBJECTS
 2 
 3               WHERE DATA_OBJECT_ID  = ‘24976‘;
 4 
 5      
 6 
 7     DATA_OBJEC OBJECT_NAME                                                                 
 8 
 9     ---------- ------------------------------------------------------
10 
11          24976 tab1_index5
Oracle索引修复 ,ORA-00600: internal error code, arguments: [6200],

 

 这个索引就是我们应该去重建的那个。

 

Oracle索引修复 ,ORA-00600: internal error code, arguments: [6200],

上一篇:SQL Server 数据库部分常用语句小结(四)


下一篇:第三天--注入攻击:Web安全之SQL注入漏洞专题