通过BBED跳过缺失的归档修复数据库

我们知道oracle恢复的基础依赖于2个东西,一个是SCN,一个是RBA,SCN有2部分组成,RBA由3部分组成:

SCN = scnBase.scnWrap

RBA = log sequence number + log file block number + offset

the log file sequence number (4 bytes)

the log file block number (4 bytes)

the byte offset into the block at which the redo record starts (2 bytes)

SCN:

BBED> p kcvfhckp

struct kcvfhckp, 160 bytes                  @484    

   struct kcvcpscn, 8 bytes                 @484    

      ub4 kscnbas                           @484      0x1b7b517a

      ub2 kscnwrp                           @488      0x099c

RBA:

BBED> p kcvfhckp

struct kcvfhckp, 160 bytes                  @484    

   struct kcvcpscn, 8 bytes                 @484    

      ub4 kscnbas                           @484      0x1b7b517a

      ub2 kscnwrp                           @488      0x099c

   ub4 kcvcptim                             @492      0x2c5ce2c0

   ub2 kcvcpthr                             @496      0x0001

   union u, 12 bytes                        @500    

      struct kcvcprba, 12 bytes             @500    

         ub4 kcrbaseq                       @500      0x00002a89

         ub4 kcrbabno                       @504      0x00000002

         ub2 kcrbabof                       @508      0x0010

   ub1 kcvcpetb[0]                          @512      0x02

   ... ...

   ub1 kcvcpetb[128]                        @640      0x00

所以,要跳过一个归档日志,我们修改SCN和RBA就可以了,那么修改成什么值呢?就是要跳过的归档日志的下一个归档日志中记录的SCN和RBA值!修改datafile header与其保持一致就可以了,SCN,及RBA的log sequence可以从v$log_history中找出来, log file block number及offset可以将归档日志dump出来查看,经过我的观察,归档日志的起始地址随后都是:baseRBA.00000002.0010

REDO RECORD - Thread:1 RBA: 0x001e64.00000002.0010 LEN: 0x0054 VLD: 0x01

SCN: 0x0000.4b6ca745 SUBSCN:  1 09/04/2010 19:54:42

CHANGE #1 TYP:0 CLS:21 AFN:2 DBA:0x00800029 SCN:0x0000.4b6ca73f SEQ:  2 OP:5.4

ktucm redo: slt: 0x002d sqn: 0x0011c70e srt: 0 sta: 9 flg: 0x2

ktucf redo: uba: 0x0080085a.5b38.34 ext: 2 spc: 3414 fbi: 0

注意,所有的datafile header都需要修改,当然temp文件除外了!

修改完成后,做恢复时,可能会遇到ORA-600 [3020] "Stuck Recovery"这样的错误,如果要跳过的归档日志很小的话那么可能会跳过去,如果归档日志很大的话时就说要跳过的数据很多,那么可能就恢复不了了,许多的客户都是到了数据丢失的时候才知道没有备份....

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值