咨询微信: dbservice1234 7 x 24 在线支持!

ORA-00600: internal error code, arguments:[4147] 错误解析

ORA-00600: internal error code, arguments:[4147] 错误解析

 

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638 QQ号:47079569 邮箱:service@parnassusdata.com

 

ORA-00600: internal error code, arguments:[4147]

 

Oracle ORA-00600 [4147]错误解析

ORA-00600 [4147]错误从Oracle 8.1.7.4开始被引入,ORA-600[4147][a][b] 一般说明undo segment存在讹误/损坏。

[a] Record number from the UBA we want to look at.
[b] Count on the Undo block header.

 

该ORA-00600 [4147]错误当oracle读取一个数据块时,需要读取UBA指定的undo block时,发现uba指定的record number记录数在undo header中找不到对应的记录。

则该正被验证的undo 数据块将转储到我们能看到的ORA-600[4147]的trace中,例如如下undo 数据:

 

2007-07-10 10:48:48.467
*** SERVICE NAME:(SYS$USERS) 2007-07-10 10:48:48.466
*** SESSION ID:(281.26013) 2007-07-10 10:48:48.466
Dump of buffer cache at level 3
BH (0x0x72fcbfe0) file#: 2 rdba: 0x00802fdc (2/12252) class: 42 ba: 0x0x72618000
set: 6 blksize: 8192 bsi: 0 set_flg: 0 pwbcnt: 0
dbwrid: 0 obj: -1 objn: 0 tsn: 1 afn: 2
hash: [53faf870,ac20da50] lru: [53fd885c,57fb57ec]
ckptq: [60fe6408,53fd8830] fileq: [77fed448,68fe2cf0]
use: [NULL] wait: [NULL]
st: XCURRENT md: NULL tch: 2 txn: 0xac793324
flags 0x2002009: buffer_dirty private gotten_in_current_mode redo_since_read
LRBA: [0xba99.1bd30.0] HSCN: [0x0.132c41a1] HSUB: [1]
buffer tsn: 1 rdba: 0x00802fdc (2/12252)
scn: 0x0000.132c41a1 seq: 0x06 flg: 0x00 tail: 0x41a10206
frmt: 0x02 chkval: 0x0000 type: 0x02=KTU UNDO BLOCK
********************************************************************************
UNDO BLK:
xid: 0x000d.024.00004a96 seq: 0x13ae cnt: 0xa irb: 0xa icl: 0x0 flg: 0x0000 --> cnt: 0xa = 10

 

 

这里问题存在于undo segment is usn#=13(在16进制中为 d ) –> cnt: 0xa = 10, 10代表这个事务中只有10个链式记录

*** 2007-07-10 10:50:13.794
ksedmp: internal or fatal error
ORA-00600: internal error code, arguments: [4147], [12], [10], [], [], [], [],
Current SQL statement for this session:
UPDATE POTENTIAL_VIOS ....
Block header dump: 0x09004664
Object id on Block? Y
seg/obj: 0x17adb csc: 0x00.132c4258 itc: 2 flg: O typ: 1 - DATA
fsl: 0 fnx: 0x9004665 ver: 0x01
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x000d.024.00004a96 0x00802fdc.13ae.0c ---- 1 fsc 0x0000.00000000
0x02 0x000d.020.00004a96 0x00802fdc.13ae.02 C--- 0 scn 0x0000.132c4193

我们需要更新一条记录,其也是该未提交事务的一部分,记录在UBA: 0x00802fdc.13ae.0c中。 UBA的形式结构是 UndoBlockAddress = dba.seq#.rec# 。
uba 显示rec#=0c 说明该change是第12个链式记录。 但是undo 头却显示只有10个链式记录。

因为将触发 ora-600[4147[12][10]错误。

 

针对该问题常见有几种解决方案:

drop 并重建相关对象,主要是table

从rman中恢复undo 数据文件 并recover

若以上2个方案都不行,则考虑设置2个隐藏参数_offline_rollback_segments 和_corrupted_rollback_segments来绕过问题。