特殊恢复:ORA-00704、ORA-00604、ORA-01555未提交事务时的处理方案

特殊恢复:ORA-00704、ORA-00604、ORA-01555未提交事务时的处理方案

我们的文章会在微信公众号IT民工的龙马人生博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。

一、案例背景

本次案例主要是分享有未提交的事务,导致数据库在启动过程中触发ORA-01555的报错。这个案例也是来至于一个网友,数据库无法打开,希望能帮助他把数据库打开。因为数据库比较小,所以网友是通过云盘的方式共享所有的数据文件,我在自己的环境中操作的。

二、环境与版本

  • 数据库版本:Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
  • 操作系统:Red Hat Enterprise Linux AS release 4 (Nahant Update 8)

三、故障现象

数据库启动过程中,出现如下报错:

ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00704: bootstrap process failure
ORA-00604: error occurred at recursive SQL level 1
ORA-01555: snapshot too old: rollback segment number 6 with name "_SYSSMU6_3654194381$" too small

简要说明
ORA-01555 是 Oracle 中常见的“快照过旧”错误,通常出现在长事务或回滚段空间不足时。本案例中,该错误直接导致数据库无法正常 open。

四、初步处理过程

1. 修改数据文件位置与参数

由于恢复环境与原环境路径不一致,需调整参数文件和数据文件路径。通过重建控制文件、修改参数文件等方式,确保数据库能正常 mount。

2. 尝试恢复数据库

执行 recover database using backup controlfile until cancel;,并尝试 alter database open resetlogs;,但依然报错 ORA-01555。

3. 切换 UNDO 表空间

尝试将 undo_tablespace 参数切换为 SYSTEM,但问题依旧。

4. 设置隐藏参数

尝试设置 _offline_rollback_segments_corrupted_rollback_segments,无效。

五、详细分析过程

1. 查看 Alert 日志

通过 alert 日志发现,报错 SQL 为:

select obj#,type#,ctime,mtime,stime, status, dataobj#, flags, oid$, spare1, spare2 
from obj$ 
where owner#=:1 and name=:2 and namespace=:3 and remoteowner is null and linkname is null and subname is null

2. 配置事件获取详细日志

通过 oradebug 配置 10046 及 errorstack 事件,获取详细 trace 文件,便于后续分析。

3. 分析 Trace 文件

  • 发现 SQL 访问了 file#=1 block#=20804,涉及索引块。
  • 进一步分析发现,相关事务的 undo 记录已被覆盖,导致回滚时无法获取所需的 undo 信息,最终触发 ORA-01555。
Block header dump:  0x00405144
 Object id on Block? Y
 seg/obj: 0x25  csc: 0x00.21eda4  itc: 2  flg: -  typ: 2 - INDEX
     fsl: 0  fnx: 0x0 ver: 0x01

 Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0002.015.0000009f  0x00c03a8d.001c.01  CB--    0  scn 0x0000.0002a810
0x02   0x0006.014.00000442  0x00c001b8.010e.11  ----    1  fsc 0x0000.00000000

这里我们可以看到XID的信息,ITL 02上面有一行的数据正在被修改,使用的undo段为6,使用的uba地址为00c001b8,使用的插槽号为14,trap#为442,块为索引块。其实这里看到是索引块,如果正常情况下,我们重建索引就可以解决问题了。或者是不走索引也是可以的。下面是将uba中的地址转为数据文件与块号

www.htz.pw > @dba_to_fno_bno.sql
Enter value for dba: 00c001b8

      FILE      BLOCK
---------- ----------
         3        440

下面继续查看块中行记录的信息

row#102[1300] flag: ------, lock: 2, len=32, data:(6):  00 41 42 1e 00 3d
col 0; len 1; (1):  80
col 1; len 5; (5):  54 45 53 54 32
col 2; len 2; (2):  c1 02
col 3; NULL
col 4; NULL
col 5; NULL
col 6; len 2; (2):  c1 03
col 7; len 1; (1):  80
col 8; len 4; (4):  c3 08 45 2e

这里看到了索引中的行记录,下面继续查看块中对象的信息

www.htz.pw > set echo off
Enter Search Object Id (i.e. 1235) : 37

                                 Object          Create               Last_Ddl
OWNEROBJECT_NAME  SUBOBJECT_NAME Type            Time                 Time                 STATUS
----------------- ------------------------------ -------------------- -------------------- ----------
SYS  I_OBJ2                      INDEX           2013-08-24 11:37:35  2013-08-24 11:37:35  VALID

这里可以看到是索引的名字等详细的信息,

4.查看undo块与头的信息

从5.3.4中我们查看了undo块的信息,下面我们来看看undo的信息

BH (0x7cbf91b8) file#: 3 rdba: 0x00c000d0 (3/208) class: 27 ba: 0x7cb7e000
  set: 3 pool: 3 bsz: 8192 bsi: 0 sflg: 2 pwc: 0,0
  dbwrid: 0 obj: -1 objn: 0 tsn: 2 afn: 3 hint: f
  hash: [0x8d040fa0,0x8d040fa0] lru: [0x7cbf93d0,0x7cbf9170]
  ckptq: [NULL] fileq: [NULL] objq: [0x8a1adeb8,0x8a1adeb8] objaq: [0x8a1adea8,0x8a1adea8]
  st: XCURRENT md: NULL fpin: 'ktuwh05: ktugct' tch: 1
  flags:
  LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN: [0xffff.ffffffff] HSUB: [65535]
  buffer tsn: 2 rdba: 0x00c000d0 (3/208)
  scn: 0x0000.0012a779 seq: 0x02 flg: 0x04 tail: 0xa7792602
  frmt: 0x02 chkval: 0x33bf type: 0x26=KTU SMU HEADER BLOCK
 
 07CB7FFF0 00000000 00000000 00000000 A7792602  [.............&y.]  
  Extent Control Header
  -----------------------------------------------------------------
  Extent Header:: spare1: 0      spare2: 0      #extents: 5      #blocks: 39    
                  last map  0x00000000  #maps: 0      offset: 4080  
      Highwater::  0x00c001a5  ext#: 1      blk#: 5      ext size: 8     
  #blocks in seg. hdr's freelists: 0     
  #blocks below: 0     
  mapblk  0x00000000  offset: 1       
                   Unlocked
     Map Header:: next  0x00000000  #extents: 5    obj#: 0      flag: 0x40000000
  Extent Map    
  -----------------------------------------------------------------
   0x00c000d1  length: 7      
   0x00c001a0  length: 8      
   0x00c001b8  length: 8      
   0x00c000d8  length: 8      
   0x00c00138  length: 8      
   
 Retention Table 
  -----------------------------------------------------------
 Extent Number:0  Commit Time: 1409188509
 Extent Number:1  Commit Time: 1409188509
 Extent Number:2  Commit Time: 0      
 Extent Number:3  Commit Time: 1409188428
 Extent Number:4  Commit Time: 1409188492
   
  TRN CTL:: seq: 0x010d chd: 0x000d ctl: 0x0015 inc: 0x00000000 nfb: 0x0001
            mgc: 0xb000 xts: 0x0068 flg: 0x0001 opt: 2147483646 (0x7ffffffe)
            uba: 0x00c001a5.010d.25 scn: 0x0000.0012a420
Version: 0x01
  FREE BLOCK POOL::
    uba: 0x00c001a5.010d.25 ext: 0x1  spc: 0xe10   
    uba: 0x00000000.0109.07 ext: 0x0  spc: 0x1a20
    uba: 0x00000000.00d1.25 ext: 0x5  spc: 0x608   
    uba: 0x00000000.00b0.01 ext: 0x6  spc: 0x1ed0  
    uba: 0x00000000.00b0.01 ext: 0x6  spc: 0x1ed0  
  TRN TBL::
   
  index  state cflags  wrap#    uel         scn            dba            parent-xid    nub     stmt_num    cmt
  ------------------------------------------------------------------------------------------------
   0x00    9    0x00  0x0442  0x001f  0x0000.0012a6b9  0x00c001a4  0x0000.000.00000000  0x00000001   0x00000000  1409188524
   0x01    9    0x00  0x0442  0x0015  0x0000.0012a760  0x00c001a5  0x0000.000.00000000  0x00000001   0x00000000  1409188658
   0x02    9    0x00  0x0441  0x0014  0x0000.0012a515  0x00c0013b  0x0000.000.00000000  0x00000003   0x00000000  1409188485
   0x03    9    0x00  0x0441  0x000b  0x0000.0012a4b5  0x00c00138  0x0000.000.00000000  0x00000001   0x00000000  1409188478
   0x04    9    0x00  0x0441  0x0003  0x0000.0012a4a1  0x00c00138  0x0000.000.00000000  0x00000001   0x00000000  1409188478
   0x05    9    0x00  0x0441  0x0007  0x0000.0012a451  0x00c00138  0x0000.000.00000000  0x00000001   0x00000000  1409188477
   0x06    9    0x00  0x0442  0x0008  0x0000.0012a71f  0x00c001a5  0x0000.000.00000000  0x00000002   0x00000000  1409188606
   0x07    9    0x00  0x0441  0x0010  0x0000.0012a477  0x00c00138  0x0000.000.00000000  0x00000001   0x00000000  1409188478
   0x08    9    0x00  0x0441  0x0001  0x0000.0012a73d  0x00c001a5  0x0000.000.00000000  0x00000001   0x00000000  1409188608
   0x09    9    0x00  0x0441  0x0002  0x0000.0012a502  0x00c00139  0x0000.000.00000000  0x00000001   0x00000000  1409188485
   0x0a    9    0x00  0x0442  0x0020  0x0000.0012a6de  0x00c001a4  0x0000.000.00000000  0x00000001   0x00000000  1409188545
   0x0b    9    0x00  0x0441  0x0011  0x0000.0012a4cc  0x00c00138  0x0000.000.00000000  0x00000001   0x00000000  1409188481
   0x0c    9    0x00  0x0441  0x001a  0x0000.0012a5af  0x00c000d3  0x0000.000.00000000  0x00000006   0x00000000  1409188492
   0x0d    9    0x00  0x0440  0x0005  0x0000.0012a43b  0x00c00138  0x0000.000.00000000  0x00000001   0x00000000  1409188471
   0x0e    9    0x00  0x0441  0x0013  0x0000.0012a552  0x00c0013b  0x0000.000.00000000  0x00000001   0x00000000  1409188486
   0x0f    9    0x00  0x0441  0x0009  0x0000.0012a4f4  0x00c00139  0x0000.000.00000000  0x00000002   0x00000000  1409188485
   0x10    9    0x00  0x0441  0x0004  0x0000.0012a48a  0x00c00138  0x0000.000.00000000  0x00000001   0x00000000  1409188478
   0x11    9    0x00  0x0441  0x000f  0x0000.0012a4e2  0x00c00138  0x0000.000.00000000  0x00000001   0x00000000  1409188485
   0x12    9    0x00  0x0441  0x0000  0x0000.0012a6a9  0x00c001a4  0x0000.000.00000000  0x00000001   0x00000000  1409188523
   0x13    9    0x00  0x0441  0x0016  0x0000.0012a56a  0x00c0013c  0x0000.000.00000000  0x00000002   0x00000000  1409188487
   0x14    9    0x00  0x0441  0x0017  0x0000.0012a52a  0x00c0013b  0x0000.000.00000000  0x00000001   0x00000000  1409188485
   0x15    9    0x00  0x0441  0xffff  0x0000.0012a779  0x00c001a5  0x0000.000.00000000  0x00000001   0x00000000  1409188665
   0x16    9    0x00  0x0441  0x0019  0x0000.0012a57e  0x00c0013c  0x0000.000.00000000  0x00000001   0x00000000  1409188489
   0x17    9    0x00  0x0441  0x000e  0x0000.0012a541  0x00c0013b  0x0000.000.00000000  0x00000001   0x00000000  1409188486
   0x18    9    0x00  0x0441  0x001c  0x0000.0012a67e  0x00c001a1  0x0000.000.00000000  0x00000007   0x00000000  1409188509
   0x19    9    0x00  0x0441  0x000c  0x0000.0012a59b  0x00000000  0x0000.000.00000000  0x00000000   0x00000000  1409188490
   0x1a    9    0x00  0x0441  0x001b  0x0000.0012a5c5  0x00c000d3  0x0000.000.00000000  0x00000001   0x00000000  1409188494
   0x1b    9    0x00  0x0441  0x0021  0x0000.0012a5eb  0x00c000d3  0x0000.000.00000000  0x00000001   0x00000000  1409188494
   0x1c    9    0x00  0x0441  0x0012  0x0000.0012a689  0x00c001a4  0x0000.000.00000000  0x00000003   0x00000000  1409188509
   0x1d    9    0x00  0x0441  0x001e  0x0000.0012a617  0x00c000d3  0x0000.000.00000000  0x00000001   0x00000000  1409188499
   0x1e    9    0x00  0x0441  0x0018  0x0000.0012a632  0x00c000d3  0x0000.000.00000000  0x00000001   0x00000000  1409188507
   0x1f    9    0x00  0x0441  0x000a  0x0000.0012a6cb  0x00c001a4  0x0000.000.00000000  0x00000001   0x00000000  1409188538
   0x20    9    0x00  0x0441  0x0006  0x0000.0012a701  0x00c001a4  0x0000.000.00000000  0x00000001   0x00000000  1409188586
   0x21    9    0x00  0x0440  0x001d  0x0000.0012a601  0x00c000d3  0x0000.000.00000000  0x00000001   0x00000000  1409188499

这里可以看到undo段头中index为14的事务状态是9(非活动的),wrap#值为0441,比之前的块中的442还小。所以此时的undo段头块比我们所需要的段头块还要旧。
下面继续查看undo块的信息

********************************************************************************
UNDO BLK:
xid: 0x0008.007.00000389  seq: 0xdb  cnt: 0x4   irb: 0x4   icl: 0x0   flg: 0x0000

 Rec Offset      Rec Offset      Rec Offset      Rec Offset      Rec Offset
---------------------------------------------------------------------------
0x01 0x1f38     0x02 0x1eb0     0x03 0x1e50     0x04 0x1dc8

*-----------------------------
* Rec #0x1  slt: 0x18  objn: 457(0x000001c9)  objd: 457  tblspc: 0(0x00000000)
*       Layer:  11 (Row)   opc: 1   rci 0x00
Undo type:  Regular undo    Begin trans    Last buffer split:  No
Temp Object:  No
Tablespace Undo:  No
rdba: 0x00000000Ext idx: 0
flg2: 0
*-----------------------------
uba: 0x00c0014f.00da.3d ctl max scn: 0x0000.00126bb5 prv tx scn: 0x0000.00126bcd
txn start scn: scn: 0x0000.00126f93 logon user: 0
 prev brb: 12583242 prev bcl: 0
KDO undo record:
KTB Redo
op: 0x04  ver: 0x01
compat bit: 4 (post-11) padding: 1
op: L  itl: xid:  0x0005.020.00000375 uba: 0x00c001ae.00ba.2e
                      flg: C---    lkc:  0     scn: 0x0000.00126b8b
KDO Op code: URP row dependencies Disabled
  xtype: XAxtype KDO_KDOM2 flags: 0x00000080  bdba: 0x00400c21  hdba: 0x00400c18
itli: 1  ispac: 0  maxfr: 4863
tabn: 0 slot: 173(0xad) flag: 0x2c lock: 0 ckix: 11
ncol: 9 nnew: 7 size: 0
Vector content:
col  2: [ 2]  c1 07
col  3: [ 2]  c1 04
col  4: [ 1]  80
col  5: [ 1]  80
col  6: [ 1]  80
col  7: [ 1]  80
col  8: [ 7]  78 72 08 1a 0c 01 10

*-----------------------------
* Rec #0x2  slt: 0x1b  objn: 461(0x000001cd)  objd: 461  tblspc: 0(0x00000000)
*       Layer:  11 (Row)   opc: 1   rci 0x00
Undo type:  Regular undo    Begin trans    Last buffer split:  No
Temp Object:  No
Tablespace Undo:  No
rdba: 0x00000000Ext idx: 0
flg2: 0
*-----------------------------
uba: 0x00c001b8.00db.01 ctl max scn: 0x0000.00126bcd prv tx scn: 0x0000.00126bd9
txn start scn: scn: 0x0000.00126f9d logon user: 0
 prev brb: 12583244 prev bcl: 0
KDO undo record:
KTB Redo
op: 0x04  ver: 0x01
compat bit: 4 (post-11) padding: 1
op: L  itl: xid:  0x0001.00c.000002b9 uba: 0x00c0023a.00cc.36
                      flg: C---    lkc:  0     scn: 0x0000.00126f9b
KDO Op code: DRP row dependencies Disabled
  xtype: XA flags: 0x00000000  bdba: 0x00400c72  hdba: 0x00400c70
itli: 1  ispac: 0  maxfr: 4863
tabn: 0 slot: 171(0xab)

*-----------------------------
* Rec #0x3  slt: 0x1b  objn: 462(0x000001ce)  objd: 462  tblspc: 0(0x00000000)
*       Layer:  10 (Index)   opc: 22   rci 0x02
Undo type:  Regular undo   Last buffer split:  No
Temp Object:  No
Tablespace Undo:  No
rdba: 0x00000000
*-----------------------------
index undo for leaf key operations
KTB Redo
op: 0x04  ver: 0x01
compat bit: 4 (post-11) padding: 1
op: L  itl: xid:  0x0009.006.00000394 uba: 0x00c00155.00e6.29
                      flg: C---    lkc:  0     scn: 0x0000.00126f9c
Dump kdilk : itl=2, kdxlkflg=0x1 sdc=32655 indexid=0x400c90 block=0x00400c91
(kdxlpu): purge leaf row
key :(5):  04 c3 08 13 29

*-----------------------------
* Rec #0x4  slt: 0x07  objn: 71834(0x0001189a)  objd: 71834  tblspc: 1(0x00000001)
*       Layer:  11 (Row)   opc: 1   rci 0x00
Undo type:  Regular undo    Begin trans    Last buffer split:  No
Temp Object:  No
Tablespace Undo:  No
rdba: 0x00000000Ext idx: 0
flg2: 0
*-----------------------------
uba: 0x00c001b8.00db.02 ctl max scn: 0x0000.00126bd9 prv tx scn: 0x0000.00126c09
txn start scn: scn: 0x0000.00126ec1 logon user: 71
 prev brb: 12583244 prev bcl: 0
KDO undo record:
KTB Redo
op: 0x04  ver: 0x01
compat bit: 4 (post-11) padding: 1
op: L  itl: xid:  0x000a.009.000002d3 uba: 0x00c00356.009a.0c
                      flg: C---    lkc:  0     scn: 0x0000.0012666e
KDO Op code: DRP row dependencies Disabled
  xtype: XA flags: 0x00000000  bdba: 0x00810933  hdba: 0x00810932
itli: 1  ispac: 0  maxfr: 4858
tabn: 0 slot: 1(0x1)

在undo数据块中,也没有查看我们所需要的事务的UNDO记录数

5.分析结果

由于undo中没有包含事务所需要的undo记录,导致事务rollback的时候,触发了ORA-01555报错。这里知道原因后,解决问题就很简单了

6.bbed验证一下块中数据

[oracle@www.htz.pw trace]$bbed
Password: 

BBED: Release 2.0.0.0.0 - Limited Production on Thu Aug 28 12:39:42 2014

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

************* !!! For Oracle Internal Use only !!! ***************

BBED> set filename '/oracle/app/oracle/oradata/database/cos11g/system01.dbf';
        FILENAME        /oracle/app/oracle/oradata/database/cos11g/system01.dbf

BBED> set block 20804
        BLOCK#          20804

BBED> map
 File: /oracle/app/oracle/oradata/database/cos11g/system01.dbf (0)
 Block: 20804                                 Dba:0x00000000
------------------------------------------------------------
 KTB Data Block (Index Leaf)

 struct kcbh, 20 bytes                      @0       

 struct ktbbh, 72 bytes                     @20      

 struct kdxle, 32 bytes                     @92      

 sb2 kd_off[156]                            @124     

 ub1 freespace[952]                         @436     

 ub1 rowdata[6732]                          @1388    

 ub4 tailchk                                @8188    


BBED> p ktbbh
struct ktbbh, 72 bytes                      @20      
   ub1 ktbbhtyp                             @20       0x02 (KDDBTINDEX)
   union ktbbhsid, 4 bytes                  @24      
      ub4 ktbbhsg1                          @24       0x00000025
      ub4 ktbbhod1                          @24       0x00000025
   struct ktbbhcsc, 8 bytes                 @28      
      ub4 kscnbas                           @28       0x0012a91c
      ub2 kscnwrp                           @32       0x0000
   sb2 ktbbhict                             @36       7938
   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       0x0002
         ub2 kxidslt                        @46       0x0015
         ub4 kxidsqn                        @48       0x0000009f
      struct ktbituba, 8 bytes              @52      
         ub4 kubadba                        @52       0x00c03a8d
         ub2 kubaseq                        @56       0x001c
         ub1 kubarec                        @58       0x01
      ub2 ktbitflg                          @60       0xc000 (KTBFIBI, KTBFCOM)
      union _ktbitun, 2 bytes               @62      
         sb2 _ktbitfsc                      @62       0
         ub2 _ktbitwrp                      @62       0x0000
      ub4 ktbitbas                          @64       0x0002a810
   struct ktbbhitl[1], 24 bytes             @68      
      struct ktbitxid, 8 bytes              @68      
         ub2 kxidusn                        @68       0x0006
         ub2 kxidslt                        @70       0x0014
         ub4 kxidsqn                        @72       0x00000442
      struct ktbituba, 8 bytes              @76      
         ub4 kubadba                        @76       0x00c001b8
         ub2 kubaseq                        @80       0x010e
         ub1 kubarec                        @82       0x11
      ub2 ktbitflg                          @84       0x0001 (NONE)
      union _ktbitun, 2 bytes               @86      
         sb2 _ktbitfsc                      @86       0
         ub2 _ktbitwrp                      @86       0x0000
      ub4 ktbitbas                          @88       0x00000000
      
      
     

BBED>  x /rncnn *kd_off[104]
rowdata[4]                                  @1392    
----------
flag@1392:     0x00 (NONE)
lock@1393:     0x02
keydata[6]:    0x00  0x41  0x42  0x1e  0x00  0x3d 
data key:
col    0[1] @1401: 0 
col    1[5] @1403: TEST2
col    2[2] @1409: 1 
col    3[0] @1412: *NULL*
col    4[0] @1413: *NULL*
col    5[0] @1414: *NULL*
col    6[2] @1415: 2 
col    7[1] @1418: 0 
col    8[4] @1420: 76845 

六、 故障处理过程

此故障处理的方法一般有2种

  • 走全表扫描
  • 手动提交事务信息

6.1 走全表扫描

由于这里是oracle2进制中的sql触发的报错,所以要走全表扫描,需要修改oracle2进制文件,见曾经的笔记ORA-08103,使用ue修改oracle2进制文件来完美解决,连接ue修改oracle文件

6.2 手动提交事务

相信这种情况下,大家一般会选择bbed的方法来解决,因为这种方法更简单,但是这种方法风险更高。如果要修改oracle2进制文件,需要在sql中增加full提示或者修改where后面列的信息,上面sql中引用的列都是字符集,增加更改起来比较麻烦,不仅需要改SQL内容,还需要更改其它地方,不然会open的时候会触发ORA-07445报错。

BBED> x /rncnn *kd_off[104]
rowdata[4]                                  @1392    
----------
flag@1392:     0x00 (NONE)
lock@1393:     0x02
keydata[6]:    0x00  0x41  0x42  0x1e  0x00  0x3d 
data key:
col    0[1] @1401: 0 
col    1[5] @1403: TEST2
col    2[2] @1409: 1 
col    3[0] @1412: *NULL*
col    4[0] @1413: *NULL*
col    5[0] @1414: *NULL*
col    6[2] @1415: 2 
col    7[1] @1418: 0 
col    8[4] @1420: 76845 


BBED> set offset 1393
        OFFSET          1393

BBED> set count 10
        COUNT           10

BBED> set mode edit
        MODE            Edit

BBED> dump
 File: /oracle/app/oracle/oradata/database/cos11g/system01.dbf (0)
 Block: 20804            Offsets: 1393 to 1402           Dba:0x00000000
------------------------------------------------------------------------
 02004142 1e003d01 8005 

 <32 bytes per line>

BBED> modify /x 00 offset 1393
 File: /oracle/app/oracle/oradata/database/cos11g/system01.dbf (0)
 Block: 20804            Offsets: 1393 to 1402           Dba:0x00000000
------------------------------------------------------------------------
 00004142 1e003d01 8005 

 <32 bytes per line>
 

BBED> verify
DBVERIFY - Verification starting
FILE = /oracle/app/oracle/oradata/database/cos11g/system01.dbf
BLOCK = 20804

Block Checking: DBA = 4215108, Block Type = KTB-managed data block
**** actual rows locked by itl 2  = 0 != # in trans. header = 1
---- end index block validation
Block 20804 failed with check code 6401

DBVERIFY - Verification complete

Total Blocks Examined         : 1
Total Blocks Processed (Data) : 0
Total Blocks Failing   (Data) : 0
Total Blocks Processed (Index): 1
Total Blocks Failing   (Index): 1
Total Blocks Empty            : 0
Total Blocks Marked Corrupt   : 0
Total Blocks Influx           : 0
Message 531 not found;  product=RDBMS; facility=BBED


BBED> p ktbbh
struct ktbbh, 72 bytes                      @20      
   ub1 ktbbhtyp                             @20       0x02 (KDDBTINDEX)
   union ktbbhsid, 4 bytes                  @24      
      ub4 ktbbhsg1                          @24       0x00000025
      ub4 ktbbhod1                          @24       0x00000025
   struct ktbbhcsc, 8 bytes                 @28      
      ub4 kscnbas                           @28       0x0012a91c
      ub2 kscnwrp                           @32       0x0000
   sb2 ktbbhict                             @36       7938
   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       0x0002
         ub2 kxidslt                        @46       0x0015
         ub4 kxidsqn                        @48       0x0000009f
      struct ktbituba, 8 bytes              @52      
         ub4 kubadba                        @52       0x00c03a8d
         ub2 kubaseq                        @56       0x001c
         ub1 kubarec                        @58       0x01
      ub2 ktbitflg                          @60       0xc000 (KTBFIBI, KTBFCOM)
      union _ktbitun, 2 bytes               @62      
         sb2 _ktbitfsc                      @62       0
         ub2 _ktbitwrp                      @62       0x0000
      ub4 ktbitbas                          @64       0x0002a810
   struct ktbbhitl[1], 24 bytes             @68      
      struct ktbitxid, 8 bytes              @68      
         ub2 kxidusn                        @68       0x0006
         ub2 kxidslt                        @70       0x0014
         ub4 kxidsqn                        @72       0x00000442
      struct ktbituba, 8 bytes              @76      
         ub4 kubadba                        @76       0x00c001b8
         ub2 kubaseq                        @80       0x010e
         ub1 kubarec                        @82       0x11
      ub2 ktbitflg                          @84       0x0001 (NONE)
      union _ktbitun, 2 bytes               @86      
         sb2 _ktbitfsc                      @86       0
         ub2 _ktbitwrp                      @86       0x0000
      ub4 ktbitbas                          @88       0x00000000

BBED> modify /x offset 84
BBED-00209: invalid number (offset)


BBED> modify /x 0080 offset 84
 File: /oracle/app/oracle/oradata/database/cos11g/system01.dbf (0)
 Block: 20804            Offsets:   84 to   93           Dba:0x00000000
------------------------------------------------------------------------
 00800000 00000000 0000 

 <32 bytes per line>

BBED> p ktbbh
struct ktbbh, 72 bytes                      @20      
   ub1 ktbbhtyp                             @20       0x02 (KDDBTINDEX)
   union ktbbhsid, 4 bytes                  @24      
      ub4 ktbbhsg1                          @24       0x00000025
      ub4 ktbbhod1                          @24       0x00000025
   struct ktbbhcsc, 8 bytes                 @28      
      ub4 kscnbas                           @28       0x0012a91c
      ub2 kscnwrp                           @32       0x0000
   sb2 ktbbhict                             @36       7938
   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       0x0002
         ub2 kxidslt                        @46       0x0015
         ub4 kxidsqn                        @48       0x0000009f
      struct ktbituba, 8 bytes              @52      
         ub4 kubadba                        @52       0x00c03a8d
         ub2 kubaseq                        @56       0x001c
         ub1 kubarec                        @58       0x01
      ub2 ktbitflg                          @60       0xc000 (KTBFIBI, KTBFCOM)
      union _ktbitun, 2 bytes               @62      
         sb2 _ktbitfsc                      @62       0
         ub2 _ktbitwrp                      @62       0x0000
      ub4 ktbitbas                          @64       0x0002a810
   struct ktbbhitl[1], 24 bytes             @68      
      struct ktbitxid, 8 bytes              @68      
         ub2 kxidusn                        @68       0x0006
         ub2 kxidslt                        @70       0x0014
         ub4 kxidsqn                        @72       0x00000442
      struct ktbituba, 8 bytes              @76      
         ub4 kubadba                        @76       0x00c001b8
         ub2 kubaseq                        @80       0x010e
         ub1 kubarec                        @82       0x11
      ub2 ktbitflg                          @84       0x8000 (KTBFCOM)
      union _ktbitun, 2 bytes               @86      
         sb2 _ktbitfsc                      @86       0
         ub2 _ktbitwrp                      @86       0x0000
      ub4 ktbitbas                          @88       0x00000000
      
BBED> verify
DBVERIFY - Verification starting
FILE = /oracle/app/oracle/oradata/database/cos11g/system01.dbf
BLOCK = 20804


DBVERIFY - Verification complete

Total Blocks Examined         : 1
Total Blocks Processed (Data) : 0
Total Blocks Failing   (Data) : 0
Total Blocks Processed (Index): 1
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

七、数据库打开

ww.htz.pw > select open_mode from v$database;

OPEN_MODE
--------------------
MOUNTED

www.htz.pw > recover database using backup controlfile until cancel;
ORA-00279: change 2223521 generated at 08/28/2014 12:30:54 needed for thread 1
ORA-00289: suggestion :
/oracle/app/oracle/fast_recovery_area/COS11G/archivelog/2014_08_28/o1_mf_1_1_%u_
.arc
ORA-00280: change 2223521 for thread 1 is in sequence #1


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1:
'/oracle/app/oracle/oradata/database/cos11g/system01.dbf'
        

ORA-01112: media recovery not started


www.htz.pw > alter database open resetlogs;

Database altered.

这里看到数据库已经打开了,下面我们需要增加TEMP文件,观察ALERT中是否有报错,如果没有报错,取消参数,以正常的方式打开数据库。如果alert中没有任何报错,一般情况下,取消参数是可以正常打开数据库的,当然因为数据库采用特殊方式打开,所以建议将数据库重建。

八、后续分享

本次我们分享的是bbed提交内容,下一次我们再分享通过修改oracle二进制文件的方式来修改此故障。

------------------作者介绍-----------------------
姓名:黄廷忠
现就职:Oracle中国高级服务团队
曾就职:OceanBase、云和恩墨、东方龙马等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值