问题描述
数据库启动的时候遇到坏块,特别是SYSTEM表空间中的一些底层表,如UNDO$,OBJ$等一些表,会导致数据库不能正常open,当然我们可以通过增加一些隐藏参数来达到跳过坏块来启动数据库,也可以通过bbed工具来手动修复块来。下面是自己的一个测试环境遇到这样的错误,通过bbed工具来修复
1,数据库版本
SQL> select * from v$version; BANNER ——————————————————————————– Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 – 64bit Production PL/SQL Release 11.2.0.3.0 – Production CORE 11.2.0.3.0 Production TNS for Linux: Version 11.2.0.3.0 – Production NLSRTL Version 11.2.0.3.0 – Production [oracle@www.htz.pw ~]$sqlplus / as sysdba SQL*Plus: Release 11.2.0.3.0 Production on Sun May 25 04:36:03 2014 Copyright (c) 1982, 2011, Oracle. All rights reserved. Connected to an idle instance. SQL> startup ORACLE instance started. Total System Global Area 237998080 bytes Fixed Size 2227216 bytes Variable Size 146801648 bytes Database Buffers 83886080 bytes Redo Buffers 5083136 bytes Database mounted. ORA-01092: ORACLE instance terminated. Disconnection forced ORA-00604: error occurred at recursive SQL level 1 ORA-00607: Internal error occurred while making a change to a data block ORA-00600: internal error code, arguments: [kdBlkCheckError], [1], [225], [6108], [], [], [], [], [], [], [], [] Process ID: 12178 Session ID: 1 Serial number: 5
2,启动报错
[oracle@www.htz.pw ~]$sqlplus / as sysdba SQL*Plus: Release 11.2.0.3.0 Production on Sun May 25 04:20:44 2014 Copyright (c) 1982, 2011, Oracle. All rights reserved. Connected to an idle instance. SQL> startup ORACLE instance started. Total System Global Area 237998080 bytes Fixed Size 2227216 bytes Variable Size 146801648 bytes Database Buffers 83886080 bytes Redo Buffers 5083136 bytes Database mounted. ORA-01092: ORACLE instance terminated. Disconnection forced ORA-00604: error occurred at recursive SQL level 1 ORA-01578: ORACLE data block corrupted (file # 1, block # 225) ORA-01110: data file 1: ‘/oracle/app/oracle/oradata/orcl1123/system01.dbf’ Process ID: 1617 Session ID: 1 Serial number: 5 此块就是存储undo$基表的块,在数据库启动的时候,做恢复的时候,是需要去读undo块的,所以导致报错
专家解答
3,bbed修复坏块
BBED> verify DBVERIFY – Verification starting FILE = /oracle/app/oracle/oradata/orcl1123/system01.dbf BLOCK = 225 Block Checking: DBA = 4194529, Block Type = KTB-managed data block Found block already marked corrupted DBVERIFY – Verification complete Total Blocks Examined : 1 Total Blocks Processed (Data) : 1 Total Blocks Failing (Data) : 0 Total Blocks Processed (Index): 0 Total Blocks Failing (Index): 0 Total Blocks Empty : 0 Total Blocks Marked Corrupt : 0 Total Blocks Influx : 0 Message 531 not found; product=RDBMS; facility=BBED 这里发现块被标记为坏块,其实这里知道就是把seq更改为FF了,下面我们修改回来就可以了 BBED> p kcbh struct kcbh, 20 bytes @0 ub1 type_kcbh @0 0x06 ub1 frmt_kcbh @1 0xa2 ub1 spare1_kcbh @2 0x00 ub1 spare2_kcbh @3 0x00 ub4 rdba_kcbh @4 0x004000e1 ub4 bas_kcbh @8 0x0021beaa ub2 wrp_kcbh @12 0x0000 ub1 seq_kcbh @14 0xff ub1 flg_kcbh @15 0x04 (KCBHFCKV) ub2 chkval_kcbh @16 0x4cba ub2 spare3_kcbh @18 0x0000 BBED> set mode edit MODE Edit BBED> set count 16 COUNT 16 BBED> modify /x 00 offset 14 Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y File: /oracle/app/oracle/oradata/orcl1123/system01.dbf (0) Block: 225 Offsets: 14 to 29 Dba:0x00000000 ———————————————————————— 0004ba4c 00000100 00000f00 0000aabe <32 bytes per line> BBED> set offset 8188 OFFSET 8188 BBED> dump File: /oracle/app/oracle/oradata/orcl1123/system01.dbf (0) Block: 225 Offsets: 8188 to 8191 Dba:0x00000000 ———————————————————————— ff06aabe <32 bytes per line> BBED> modify /x 00 offset 8188 File: /oracle/app/oracle/oradata/orcl1123/system01.dbf (0) Block: 225 Offsets: 8188 to 8191 Dba:0x00000000 ———————————————————————— 0006aabe <32 bytes per line> BBED> p tailchk ub4 tailchk @8188 0xbeaa0600 BBED> sum apply Check value for File 0, Block 225: current = 0x4cba, required = 0x4cba BBED> verify DBVERIFY – Verification starting FILE = /oracle/app/oracle/oradata/orcl1123/system01.dbf BLOCK = 225 Block Checking: DBA = 4194529, Block Type = KTB-managed data block data header at 0x2a98b8725c kdbchk: row locked by non-existent transaction table=0 slot=20 lockid=1 ktbbhitc=2 Block 225 failed with check code 6101 DBVERIFY – Verification complete Total Blocks Examined : 1 Total Blocks Processed (Data) : 1 Total Blocks Failing (Data) : 1 Total Blocks Processed (Index): 0 Total Blocks Failing (Index): 0 Total Blocks Empty : 0 Total Blocks Marked Corrupt : 0 Total Blocks Influx : 0 Message 531 not found; product=RDBMS; facility=BBED 这里看到报了ITL相当的一些东西,原因是由于原来做实验的时候,手动提交了数据。 报错代码的意思是,slot=20的行被锁住,占用了itl2. 下面是dump数据库看一下第21号的lb标记符 tl: 58 fb: –H-FL– lb: 0x1 cc: 17 col 0: [ 2] c1 15 col 1: [10] 5f 53 59 53 53 4d 55 32 30 24 col 2: [ 2] c1 02 col 3: [ 2] c1 06 col 4: [ 3] c2 03 49 col 5: [ 5] c4 02 62 0a 09 col 6: [ 1] 80 col 7: [ 3] c2 03 2a col 8: [ 3] c2 02 3e col 9: [ 1] 80 col 10: [ 2] c1 04 col 11: [ 2] c1 06 col 12: *NULL* col 13: *NULL* col 14: *NULL* col 15: *NULL* col 16: [ 2] c1 0 BBED> p *kdbr[20] rowdata[634] ———— ub1 rowdata[634] @1823 0x2c BBED> set offset 1823 OFFSET 1823 BBED> dump File: /oracle/app/oracle/oradata/orcl1123/system01.dbf (0) Block: 225 Offsets: 1823 to 1838 Dba:0x00000000 ———————————————————————— 2c011102 c1150a5f 53595353 4d553230 BBED> modify /x 2c00 File: /oracle/app/oracle/oradata/orcl1123/system01.dbf (0) Block: 225 Offsets: 1823 to 1838 Dba:0x00000000 ———————————————————————— 2c001102 c1150a5f 53595353 4d553230 <32 bytes per line> BBED> sum apply Check value for File 0, Block 225: current = 0x6ec1, required = 0x6ec1 BBED> verify DBVERIFY – Verification starting FILE = /oracle/app/oracle/oradata/orcl1123/system01.dbf BLOCK = 225 DBVERIFY – Verification complete Total Blocks Examined : 1 Total Blocks Processed (Data) : 1 Total Blocks Failing (Data) : 0 Total Blocks Processed (Index): 0 Total Blocks Failing (Index): 0 Total Blocks Empty : 0 Total Blocks Marked Corrupt : 0 Total Blocks Influx : 0 Message 531 not found; product=RDBMS; facility=BBED 块不在报错。验证通过
4,数据库正常打开
SQL> alter database open; Database altered. undo块能正常访问 SQL> select name from undo$; NAME —————————— SYSTEM _SYSSMU1$ _SYSSMU10$ _SYSSMU11$ _SYSSMU12$ _SYSSMU13$ _SYSSMU14$ _SYSSMU15$ _SYSSMU16$ _SYSSMU17$ _SYSSMU18$ NAME —————————— _SYSSMU19$ _SYSSMU2$ _SYSSMU20$ _SYSSMU3$ _SYSSMU4$ _SYSSMU5$ _SYSSMU6$ _SYSSMU7$ _SYSSMU8$ _SYSSMU9$ 21 rows selected.
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。