7 x 24 在线支持!
ORA-00600: 内部错误代码, 参数:[4147]
如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!
诗檀软件专业数据库修复团队
服务热线 : 13764045638 QQ号:47079569 邮箱:service@parnassusdata.com
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来绕过问题。