对于数据库恢复感兴趣的人,一定对于ORA-600[4000]这个著名的错误记忆犹新,这里通过试验重现ORA-600[4000]
查询数据库obj$.con$记录
[oracle@xifenfei ~]$ sqlplus /
as
sysdba
SQL*Plus: Release 10.2.0.1.0 - Production
on
Fri Nov 4 06:32:36 2011
Copyright (c) 1982, 2005, Oracle.
All
rights reserved.
Connected
to
an idle instance.
SQL> startup
ORACLE instance started.
Total System
Global
Area 318767104 bytes
Fixed
Size
1219160 bytes
Variable
Size
92276136 bytes
Database
Buffers 218103808 bytes
Redo Buffers 7168000 bytes
Database
mounted.
Database
opened.
SQL>
select
OBJ#,dbms_rowid.rowid_relative_fno(rowid) rel_fno,
2 dbms_rowid.rowid_block_number(rowid) block_num
from
obj$
3
where
name
=
'CON$'
;
OBJ# REL_FNO BLOCK_NUM
---------- ---------- ----------
28 1 122
SQL> shutdown immediate
Database
closed.
Database
dismounted.
ORACLE instance shut down.
|
bbed修改数据块
根据催华的研究,当OBJ$中部分数据块中的csc和itl的scn都大于header scn的时候,数据库启动就会报ORA-600[4000]
[oracle@xifenfei ~]$ bbed listfile=list mode=edit password=blockedit
BBED: Release 2.0.0.0.0 - Limited Production on Fri Nov 4 06:47:09 2011
Copyright (c) 1982, 2011, Oracle and
/or
its affiliates. All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************
BBED> info
File
# Name Size(blks)
----- ---- ----------
1
/u01/oracle/oradata/XFF/system01
.dbf 0
2
/u01/oracle/oradata/XFF/undotbs01
.dbf 0
3
/u01/oracle/oradata/XFF/sysaux01
.dbf 0
4
/u01/oracle/oradata/XFF/users01
.dbf 0
5
/u01/oracle/oradata/XFF/datfttuser
.dbf 0
BBED>
set
block 1
BLOCK
# 1
BBED>
set
file
1 block 1
FILE
# 1
BLOCK
# 1
BBED> p kcvfhckp.kcvcpscn
struct kcvcpscn, 8 bytes @484
ub4 kscnbas @484 0x00210f97
ub2 kscnwrp @488 0x0000
BBED>
set
block 122
BLOCK
# 122
BBED> 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 <==csc(SCN of the last block cleanout)
ub4 kscnbas @28 0x0020770d
ub2 kscnwrp @32 0x0000
sb2 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 0x0029
ub4 kxidsqn @48 0x0000029a
struct ktbituba, 8 bytes @52
ub4 kubadba @52 0x00802381
ub2 kubaseq @56 0x01f9
ub1 kubarec @58 0x03
ub2 ktbitflg @60 0x2001 (KTBFUPB)
union _ktbitun, 2 bytes @62
sb2 _ktbitfsc @62 0
ub2 _ktbitwrp @62 0x0000
ub4 ktbitbas @64 0x0020770e <==itl commit scn
BBED>
set
count 16
COUNT 16
BBED> m
/x
0d772010 offset 28
Warning: contents of previous BIFILE will be lost. Proceed? (Y
/N
) y
File:
/u01/oracle/oradata/XFF/system01
.dbf (1)
Block: 122 Offsets: 28 to 60 Dba:0x0040007a
------------------------------------------------------------------------
0d772010 00000000 01000200 00000000
<32 bytes per line>
BBED> m
/x
0e772010 offset 64
File:
/u01/oracle/oradata/XFF/system01
.dbf (1)
Block: 122 Offsets: 64 to 96 Dba:0x0040007a
------------------------------------------------------------------------
0e772010 00016c00 ffffea00 53046903
<32 bytes per line>
BBED> 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 0x1020770d
ub2 kscnwrp @32 0x0000
sb2 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 0x0029
ub4 kxidsqn @48 0x0000029a
struct ktbituba, 8 bytes @52
ub4 kubadba @52 0x00802381
ub2 kubaseq @56 0x01f9
ub1 kubarec @58 0x03
ub2 ktbitflg @60 0x2001 (KTBFUPB)
union _ktbitun, 2 bytes @62
sb2 _ktbitfsc @62 0
ub2 _ktbitwrp @62 0x0000
ub4 ktbitbas @64 0x1020770e
BBED>
sum
apply
Check value
for
File 1, Block 122:
current = 0xc902, required = 0xc902
|
启动数据库
SQL> startup
ORACLE instance started.
Total System
Global
Area 318767104 bytes
Fixed
Size
1219160 bytes
Variable
Size
92276136 bytes
Database
Buffers 218103808 bytes
Redo Buffers 7168000 bytes
Database
mounted.
ORA-01092: ORACLE instance terminated. Disconnection forced
|
查看日志
Fri Nov 4 06:50:38 2011
Database mounted
in
Exclusive Mode
Completed: ALTER DATABASE MOUNT
Fri Nov 4 06:50:38 2011
ALTER DATABASE OPEN
Fri Nov 4 06:50:38 2011
LGWR: STARTING ARCH PROCESSES
ARC0 started with pid=16, OS
id
=7048
Fri Nov 4 06:50:38 2011
ARC0: Archival started
ARC1: Archival started
LGWR: STARTING ARCH PROCESSES COMPLETE
ARC1 started with pid=17, OS
id
=7050
ARC1: STARTING ARCH PROCESSES
Fri Nov 4 06:50:38 2011
ARC0: Becoming the
'no FAL'
ARCH
ARC0: Becoming the
'no SRL'
ARCH
Fri Nov 4 06:50:38 2011
Thread 1 opened at log sequence 38
Current log
# 3 seq# 38 mem# 0: /u01/oracle/oradata/XFF/redo03.log
Successful
open
of redo thread 1
Fri Nov 4 06:50:38 2011
MTTR advisory is disabled because FAST_START_MTTR_TARGET is not
set
Fri Nov 4 06:50:38 2011
SMON: enabling cache recovery
Fri Nov 4 06:50:38 2011
ARC2: Archival started
ARC1: STARTING ARCH PROCESSES COMPLETE
ARC1: Becoming the heartbeat ARCH
ARC2 started with pid=18, OS
id
=7052
Fri Nov 4 06:50:38 2011
Errors
in
file
/u01/oracle/admin/XFF/udump/xff_ora_7046
.trc:
ORA-00600: internal error code, arguments: [4000], [5], [], [], [], [], [], []
Fri Nov 4 06:50:40 2011
Errors
in
file
/u01/oracle/admin/XFF/udump/xff_ora_7046
.trc:
ORA-00704: bootstrap process failure
ORA-00704: bootstrap process failure
ORA-00600: internal error code, arguments: [4000], [5], [], [], [], [], [], []
Fri Nov 4 06:50:40 2011
Error 704 happened during db
open
, shutting down database
USER: terminating instance due to error 704
Instance terminated by USER, pid = 7046
ORA-1092 signalled during: ALTER DATABASE OPEN...
|
在ORACL 11.2的版本中,同样的方法无法重新该错误,数据库依然能够正常打开,所以如果要测试的朋友请选择11G以下版本进行.