从上面错误来看,我们知道问题出在访问obj#上,下面继续看trace。
Object id on Block? Y
seg/obj: 0x12 csc: 0xb2c.3a7f4d34 itc: 1 flg: - typ: 1 - DATA
fsl: 0 fnx: 0x0 ver: 0x01 Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0005.01e.000099e3 0x00802689.29dd.09 --U- 1 fsc 0x0000.3a7f4d35data_block_dump,data header at 0x847ce044
===============
tsiz: 0x1fb8
hsiz: 0xea
pbl: 0x847ce044
bdba: 0x0040007a
76543210
flag=--------
ntab=1
nrow=108
frre=-1
fsbo=0xea
fseo=0x385
avsp=0x369
tosp=0x369
0xe:pti[0] nrow=108 offs=0
上面的信息比较关键,关于XID,UBA的解释,我以前也写过相关文章,这里不多说。
通过bdba: 0x0040007a 我们可以通过如下查询,得知为file 1 block 122.
select dbms_utility.data_block_address_file(TO_NUMBER('40007a', 'XXXXXXXX')) file_id,
dbms_utility.data_block_address_block(TO_NUMBER('40007a', 'XXXXXXXX')) block_id from dual;
编译BBED后,然后看了这个block的ktbbh,如下:BBED> set file 1 block 122
FILE# 1
BLOCK# 122BBED> p ktbbh
struct ktbbh, 48 bytes @20
ub1 ktbbhtyp @20 0x01 (KDDBTDATA)
union ktbbhsid, 4 bytes @24
ub4 ktbbhsg1 @24 0x00000012
ub4 ktbbhod1 @24 0x00000012
struct ktbbhcsc, 8 bytes @28
ub4 kscnbas @28 0x3a7f4d34
ub2 kscnwrp @32 0x0b2c
b2 ktbbhict @36 1
ub1 ktbbhflg @38 0x02 (NONE)
ub1 ktbbhfsl @39 0x00
ub4 ktbbhfnx @40 0x00000000
struct ktbbhitl[0], 24 bytes @44
struct ktbitxid, 8 bytes @44
ub2 kxidusn @44 0x0005
ub2 kxidslt @46 0x001e
ub4 kxidsqn @48 0x000099e3
struct ktbituba, 8 bytes @52
ub4 kubadba @52 0x00802689
ub2 kubaseq @56 0x29dd
ub1 kubarec @58 0x09
ub2 ktbitflg @60 0x2001 (KTBFUPB)
union _ktbitun, 2 bytes @62
b2 _ktbitfsc @62 0
ub2 _ktbitwrp @62 0x0000
ub4 ktbitbas @64 0x3a7f4d35
BBED>上面的ktbitxid 即为XID的,ktbituba即为UBA,其他的不多说。
这里主要是要修改 ktbitflg,该结构其实占据了2个offset。
修改的时候需要注意一下的是要看os是32位还是64位,32位的话,其字节序是反的。
我这里就直接执行modify /x 8001 offset 60 然后sum apply即可。
然后再重启数据库 直接open,发现不再出现4000错误了,而是2663,这个好办,
该错误跟2662 类似,直接调整scn即可,如下:
alter session set events '10015 trace name adjust_scn level n'; --mount下最后再次open,错误号即变成了4194,这个就太熟悉不过了,清理undo就行了。
在dbsnake的博客里面,他以前模拟了一下ora-00600 4000错误,详见如下链接:
http://dbsnake.com/2010/08/ora-600-4000-example.html
在网上能搜到的最早处理这个问题的个人应该logzgh,这哥们目前在淘宝。
链接:http://logzgh.itpub.net/post/3185/191423