zoukankan      html  css  js  c++  java
  • 基于rman的坏块恢复

    转载请注明出处 http://blog.csdn.net/guoyjoe/article/details/30965303

      实验过程例如以下:

    1、使用rman备份全库

    Recovery Manager: Release 11.2.0.3.0 - Production on Sun Jun 8 15:30:35 2014
    
    Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
    
    connected to target database: PROD (DBID=254815294)
    
    RMAN> backup database;
    
    Starting backup at 08-JUN-14
    using target database control file instead of recovery catalog
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: SID=142 device type=DISK
    channel ORA_DISK_1: starting full datafile backup set
    channel ORA_DISK_1: specifying datafile(s) in backup set
    input datafile file number=00001 name=/u01/app/oracle/oradata/PROD/system01.dbf
    input datafile file number=00005 name=/u01/app/oracle/oradata/PROD/tp01.dbf
    input datafile file number=00002 name=/u01/app/oracle/oradata/PROD/sysaux01.dbf
    input datafile file number=00003 name=/u01/app/oracle/oradata/PROD/undotbs01.dbf
    input datafile file number=00004 name=/u01/app/oracle/oradata/PROD/users01.dbf
    channel ORA_DISK_1: starting piece 1 at 08-JUN-14
    channel ORA_DISK_1: finished piece 1 at 08-JUN-14
    piece handle=/u01/app/oracle/product/11.2.0/dbs/01pab691_1_1 tag=TAG20140608T153040 comment=NONE
    channel ORA_DISK_1: backup set complete, elapsed time: 00:00:25
    channel ORA_DISK_1: starting full datafile backup set
    channel ORA_DISK_1: specifying datafile(s) in backup set
    including current control file in backup set
    including current SPFILE in backup set
    channel ORA_DISK_1: starting piece 1 at 08-JUN-14
    channel ORA_DISK_1: finished piece 1 at 08-JUN-14
    piece handle=/u01/app/oracle/product/11.2.0/dbs/02pab69q_1_1 tag=TAG20140608T153040 comment=NONE
    channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
    Finished backup at 08-JUN-14

    2、利用BBED破坏块

    (1)针对gyj_t1表的20869号块做測试,如今能够查出记录

    gyj@PROD> select id,name,dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid) from gyj_t1;
    
            ID NAME       DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
    ---------- ---------- ------------------------------------ ------------------------------------
             1 oracledba                                     5                                20869
    

    (2)使用BBED破坏20869号块的seq

    [root@jfdb ~]# su - oracle
    [oracle@jfdb ~]$ bbed parfile=par.txt
    Password: 
    
    BBED: Release 2.0.0.0.0 - Limited Production on Sun Jun 8 15:33:10 2014
    
    Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
    
    ************* !!! For Oracle Internal Use only !!! ***************
    
    BBED> set file 5   block 20869
            FILE#           5
            BLOCK#          20869
    
    BBED> map /v
     File: /u01/app/oracle/oradata/PROD/tp01.dbf (5)
     Block: 20869                                 Dba:0x01405185
    ------------------------------------------------------------
     KTB Data Block (Table/Cluster)
    
     struct kcbh, 20 bytes                      @0       
        ub1 type_kcbh                           @0       
        ub1 frmt_kcbh                           @1       
        ub1 spare1_kcbh                         @2       
        ub1 spare2_kcbh                         @3       
        ub4 rdba_kcbh                           @4       
        ub4 bas_kcbh                            @8       
        ub2 wrp_kcbh                            @12      
        ub1 seq_kcbh                            @14      
        ub1 flg_kcbh                            @15      
        ub2 chkval_kcbh                         @16      
        ub2 spare3_kcbh                         @18      
    
     struct ktbbh, 72 bytes                     @20      
        ub1 ktbbhtyp                            @20      
        union ktbbhsid, 4 bytes                 @24      
        struct ktbbhcsc, 8 bytes                @28      
        sb2 ktbbhict                            @36      
        ub1 ktbbhflg                            @38      
        ub1 ktbbhfsl                            @39      
        ub4 ktbbhfnx                            @40      
        struct ktbbhitl[2], 48 bytes            @44      
    
     struct kdbh, 14 bytes                      @100     
        ub1 kdbhflag                            @100     
        sb1 kdbhntab                            @101     
        sb2 kdbhnrow                            @102     
        sb2 kdbhfrre                            @104     
        sb2 kdbhfsbo                            @106     
        sb2 kdbhfseo                            @108     
        sb2 kdbhavsp                            @110     
        sb2 kdbhtosp                            @112     
    
     struct kdbt[1], 4 bytes                    @114     
        sb2 kdbtoffs                            @114     
        sb2 kdbtnrow                            @116     
    
     sb2 kdbr[1]                                @118     
    
     ub1 freespace[8038]                        @120     
    
     ub1 rowdata[30]                            @8158    
    
     ub4 tailchk                                @8188    
    
    
    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        0x01405185
       ub4 bas_kcbh                             @8        0x00176fed
       ub2 wrp_kcbh                             @12       0x0000
       ub1 seq_kcbh                             @14       0x01
       ub1 flg_kcbh                             @15       0x06 (KCBHFDLC, KCBHFCKV)
       ub2 chkval_kcbh                          @16       0xc140
       ub2 spare3_kcbh                          @18       0x0000
    
    BBED> m /x ff offset 14
    Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
     File: /u01/app/oracle/oradata/PROD/tp01.dbf (5)
     Block: 20869            Offsets:   14 to  525           Dba:0x01405185
    ------------------------------------------------------------------------
     ff0640c1 00000100 00003945 0000eb6f 17000000 00000200 32008051 40010700 
     20008b02 00002c49 c0002301 02000080 0000876d 17000300 1a007503 0000bf1f 
     c0002501 0c000120 0000ed6f 17000000 00000000 00000001 0100ffff 14007a1f 
     741f741f 00000100 7a1f0000 00000000 00000000 00000000 00000000 00000000 
     00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
     00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
     00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
     00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
     00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
     00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
     00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
     00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
     00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
     00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
     00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
     00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
    
     <32 bytes per line>
    
    BBED> sum apply
    Check value for File 5, Block 20869:
    current = 0xc1be, required = 0xc1be
    

     (3)校验报坏块

    BBED> verify
    DBVERIFY - Verification starting
    FILE = /u01/app/oracle/oradata/PROD/tp01.dbf
    BLOCK = 20869
    
    Block 20869 is corrupt
    Corrupt block relative dba: 0x01405185 (file 0, block 20869)
    Fractured block found during verification
    Data in bad block:
     type: 6 format: 2 rdba: 0x01405185
     last change scn: 0x0000.00176fed seq: 0xff flg: 0x06
     spare1: 0x0 spare2: 0x0 spare3: 0x0
     consistency value in tail: 0x6fed0601
     check value in block header: 0xc1be
     computed block checksum: 0x0
    
    
    DBVERIFY - Verification complete
    
    Total Blocks Examined         : 1
    Total Blocks Processed (Data) : 0
    Total Blocks Failing   (Data) : 0
    Total Blocks Processed (Index): 0
    Total Blocks Failing   (Index): 0
    Total Blocks Empty            : 0
    Total Blocks Marked Corrupt   : 1
    Total Blocks Influx           : 2
    Message 531 not found;  product=RDBMS; facility=BBED
    


    (4)确定不能查gyj_t1表的记录

    gyj@PROD> alter system flush buffer_cache;
    
    System altered.
    
    gyj@PROD> select id,name,dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid) from gyj_t1;
    select id,name,dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid) from gyj_t1
    *
    ERROR at line 1:
    ORA-01578: ORACLE data block corrupted (file # 5, block # 20869)
    ORA-01110: data file 5: '/u01/app/oracle/oradata/PROD/tp01.dbf'
    

    3、使用RMAN验证5号数据文件

    RMAN> backup validate datafile 5;
    
    Starting backup at 08-JUN-14
    using channel ORA_DISK_1
    channel ORA_DISK_1: starting full datafile backup set
    channel ORA_DISK_1: specifying datafile(s) in backup set
    input datafile file number=00005 name=/u01/app/oracle/oradata/PROD/tp01.dbf
    channel ORA_DISK_1: backup set complete, elapsed time: 00:00:07
    List of Datafiles
    =================
    File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
    ---- ------ -------------- ------------ --------------- ----------
    5    FAILED 0              114          64000           1659211   
      File Name: /u01/app/oracle/oradata/PROD/tp01.dbf
      Block Type Blocks Failing Blocks Processed
      ---------- -------------- ----------------
      Data       1              58883           
      Index      0              4221            
      Other      0              782             
    
    validate found one or more corrupt blocks
    See trace file /u01/app/oracle/diag/rdbms/prod/PROD/trace/PROD_ora_2750.trc for details
    Finished backup at 08-JUN-14
    

    4、查5号文件的坏块

    gyj@PROD> select FILE#,BLOCK#,BLOCKS,CORRUPTION_CHANGE#,CORRUPTION_TYPE from v$database_block_corruption where file#=5;
    
         FILE#     BLOCK#     BLOCKS CORRUPTION_CHANGE# CORRUPTIO
    ---------- ---------- ---------- ------------------ ---------
             5      20869          1                  0 FRACTURED


    5、使用rman恢复坏块

    RMAN> blockrecover datafile 5 block  20869;
    
    Starting recover at 08-JUN-14
    using channel ORA_DISK_1
    
    channel ORA_DISK_1: restoring block(s)
    channel ORA_DISK_1: specifying block(s) to restore from backup set
    restoring blocks of datafile 00005
    channel ORA_DISK_1: reading from backup piece /u01/app/oracle/product/11.2.0/dbs/01pab691_1_1
    channel ORA_DISK_1: piece handle=/u01/app/oracle/product/11.2.0/dbs/01pab691_1_1 tag=TAG20140608T153040
    channel ORA_DISK_1: restored block(s) from backup piece 1
    channel ORA_DISK_1: block restore complete, elapsed time: 00:00:01
    
    starting media recovery
    media recovery complete, elapsed time: 00:00:01
    
    Finished recover at 08-JUN-14
    


    6、再次查5号文件的坏块。已经消息了(假设还有记录。那再次运行backup validate datafile 5;)

    gyj@PROD> select FILE#,BLOCK#,BLOCKS,CORRUPTION_CHANGE#,CORRUPTION_TYPE from v$database_block_corruption where file#=5;
    
    no rows selected
    


    7、查表gyj_t1记录也有了。说明恢复成功

    gyj@PROD> select id,name,dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid) from gyj_t1;
    
            ID NAME       DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
    ---------- ---------- ------------------------------------ ------------------------------------
             1 oracledba                                     5                                20869
    



查看全文
  • 相关阅读:
    useState 的介绍和多状态声明(二)
    PHP:相对于C#,PHP中的个性化语法
    PHP:IIS下的PHP开发环境搭建
    PHP:同一件事,有太多的方式
    Javascript:再论Javascript的单线程机制 之 DOM渲染时机
    Javascript:拦截所有AJAX调用,重点处理服务器异常
    DDD:谈谈数据模型、领域模型、视图模型和命令模型
    .NET:再论异常处理,一个真实的故事
    Javascript:由 “鸭子类型” 得出来的推论
    Workflow:采用坐标变换(移动和旋转)画箭头
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10706055.html
  • Copyright © 2011-2022 走看看