联系:手机/微信(+86 17813235971) QQ(107644445)
作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]
对于数据库恢复感兴趣的人,一定对于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以下版本进行.