Welcome 微信登录

首页 / 数据库 / MySQL / Oracle启动时提示ORA-01578错误解决

Oracle数据库启动的时候遇到坏块,特别是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 ProductionPL/SQL Release 11.2.0.3.0 - ProductionCORE    11.2.0.3.0      ProductionTNS for Linux: Version 11.2.0.3.0 - ProductionNLSRTL 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> startupORACLE instance started. Total System Global Area  237998080 bytesFixed Size                  2227216 bytesVariable Size           146801648 bytesDatabase Buffers         83886080 bytesRedo Buffers                5083136 bytesDatabase mounted.ORA-01092: ORACLE instance terminated. Disconnection forcedORA-00604: error occurred at recursive SQL level 1ORA-00607: Internal error occurred while making a change to a data blockORA-00600: internal error code, arguments: [kdBlkCheckError], [1], [225],[6108], [], [], [], [], [], [], [], []Process ID: 12178Session ID: 1 Serial number: 5
 2,启动报错[oracle@www.htz.pw ~]$sqlplus / as sysdbaSQL*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> startupORACLE instance started. Total System Global Area  237998080 bytesFixed Size                  2227216 bytesVariable Size           146801648 bytesDatabase Buffers         83886080 bytesRedo Buffers                5083136 bytesDatabase mounted.ORA-01092: ORACLE instance terminated. Disconnection forcedORA-00604: error occurred at recursive SQL level 1ORA-01578: ORACLE data block corrupted (file # 1, block # 225)ORA-01110: data file 1: "/oracle/app/oracle/oradata/orcl1123/system01.dbf"Process ID: 1617Session ID: 1 Serial number: 5此块就是存储undo$基表的块,在数据库启动的时候,做恢复的时候,是需要去读undo块的,所以导致报错3,bbed修复坏块BBED> verifyDBVERIFY - Verification startingFILE = /oracle/app/oracle/oradata/orcl1123/system01.dbfBLOCK = 225 Block Checking: DBA = 4194529, Block Type = KTB-managed data blockFound block already marked corrupted DBVERIFY - Verification complete Total Blocks Examined       : 1Total Blocks Processed (Data) : 1Total Blocks Failing (Data) : 0Total Blocks Processed (Index): 0Total Blocks Failing (Index): 0Total Blocks Empty            : 0Total Blocks Marked Corrupt : 0Total Blocks Influx         : 0Message 531 not found;  product=RDBMS; facility=BBED这里发现块被标记为坏块,其实这里知道就是把seq更改为FF了,下面我们修改回来就可以了BBED> p kcbhstruct 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 14Warning: 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 tailchkub4 tailchk                               @8188   0xbeaa0600  BBED> sum applyCheck value for File 0, Block 225:current = 0x4cba, required = 0x4cba BBED> verifyDBVERIFY - Verification startingFILE = /oracle/app/oracle/oradata/orcl1123/system01.dbfBLOCK = 225 Block Checking: DBA = 4194529, Block Type = KTB-managed data blockdata header at 0x2a98b8725ckdbchk: row locked by non-existent transaction        table=0 slot=20        lockid=1 ktbbhitc=2Block 225 failed with check code 6101 DBVERIFY - Verification complete Total Blocks Examined       : 1Total Blocks Processed (Data) : 1Total Blocks Failing (Data) : 1Total Blocks Processed (Index): 0Total Blocks Failing (Index): 0Total Blocks Empty            : 0Total Blocks Marked Corrupt : 0Total Blocks Influx         : 0Message 531 not found;  product=RDBMS; facility=BBED这里看到报了ITL相当的一些东西,原因是由于原来做实验的时候,手动提交了数据。报错代码的意思是,slot=20的行被锁住,占用了itl2. 下面是dump数据库看一下第21号的lb标记符tl: 58 fb: --H-FL-- lb: 0x1  cc: 17col  0: [ 2]  c1 15col  1: [10]  5f 53 59 53 53 4d 55 32 30 24col  2: [ 2]  c1 02col  3: [ 2]  c1 06col  4: [ 3]  c2 03 49col  5: [ 5]  c4 02 62 0a 09col  6: [ 1]  80col  7: [ 3]  c2 03 2acol  8: [ 3]  c2 02 3ecol  9: [ 1]  80col 10: [ 2]  c1 04col 11: [ 2]  c1 06col 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 4d553230BBED> 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 applyCheck value for File 0, Block 225:current = 0x6ec1, required = 0x6ec1 BBED> verifyDBVERIFY - Verification startingFILE = /oracle/app/oracle/oradata/orcl1123/system01.dbfBLOCK = 225  DBVERIFY - Verification complete Total Blocks Examined       : 1Total Blocks Processed (Data) : 1Total Blocks Failing (Data) : 0Total Blocks Processed (Index): 0Total Blocks Failing (Index): 0Total Blocks Empty            : 0Total Blocks Marked Corrupt : 0Total Blocks Influx         : 0Message 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.VMware+Linux+Oracle 10G RAC全程详细图解 http://www.linuxidc.com/Linux/2011-02/31976.htm在CentOS 6.4下安装Oracle 11gR2(x64) http://www.linuxidc.com/Linux/2014-02/97374.htmOracle 11gR2 在VMWare虚拟机中安装步骤 http://www.linuxidc.com/Linux/2013-09/89579p2.htmDebian 下 安装 Oracle 11g XE R2 http://www.linuxidc.com/Linux/2014-03/98881.htmOracle 11gR2 在VMWare虚拟机中安装步骤 http://www.linuxidc.com/Linux/2013-09/89579.htm更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12 本文永久更新链接地址