• [Oracle工程师手记] 目前未被使用的块中包含坏块的对应方法


     
          如果数据库中,检查出了 坏块,但是这些个坏块并不属于任何的对象,其实是不必处理的。等到数据库中建立一个新的对象,或旧的对象扩张,用到了这个Free 的坏块,它应该会被重新初始化或者说格式化的。
         
         但是,此时如果用 RMAN 进行检查 (rman valiate),还是会报出错来,有的客户会觉得不爽。那么我们可以利用 RMAN 备份时,跳过Free 的块的特点,建立这个数据文件的备份,再用这个不包含坏块的备份,刷掉数据文件中的Free 坏块。

    下面我做一个模拟,来说明这个过程: 比如我建立了一个 表空间,它的数据文件是 5 号数据文件:

    SQL> create tablespace tbs001 datafile '/myopt/datafile/df001.dbf' size 200M;
    
    SQL> grant dba to u1 identified by u1;
    SQL> alter user u1 default tablespace tbs001;
    
    
    SQL> conn u1/u1
    SQL> create table tab001 as select * from dba_objects;
    SQL> insert into tab001 select * from tab001;
    SQL> commit;
    
    
    SQL> set linesize 200
    SQL> col name for a60
    SQL> select file#, name from v$datafile;
    
         FILE# NAME
    ---------- ------------------------------------------------------------
             1 /myopt/<myorclpath>/system01
               .dbf
    
             3 /myopt/<myorclpath>/sysaux01
               .dbf
    
             4 /myopt/<myorclpath>/undotbs0
               1.dbf
    
             5 /myopt/datafile/df001.dbf
             7 /myopt/<myorclpath>/users01.
    
         FILE# NAME
    ---------- ------------------------------------------------------------
               dbf
    

     假定我现在的5号数据文件上有一个第150个块,它不属于任何一个object,但是是一个坏块。我可以如此操作,来格式化它。

    先做出这个数据文件的备份:

    RMAN> backup check logical datafile 5 format '/myopt/back/%U' tag 'CORRUPT_BLK_FILE_BKP';
    
    Starting backup at 09-APR-21
    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=/myopt/datafile/df001.dbf
    channel ORA_DISK_1: starting piece 1 at 09-APR-21
    channel ORA_DISK_1: finished piece 1 at 09-APR-21
    piece handle=/myopt/back/08vrrckk_1_1 tag=CORRUPT_BLK_FILE_BKP comment=NONE
    channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
    Finished backup at 09-APR-21
    ...
    
    RMAN> list copy;
    
    specification does not match any datafile copy in the repository
    specification does not match any control file copy in the repository
    specification does not match any archived log in the repository
    
    RMAN> list backup;
    
    
    List of Backup Sets
    ===================
    
    
    BS Key  Type LV Size       Device Type Elapsed Time Completion Time
    ------- ---- -- ---------- ----------- ------------ ---------------
    6       Full    23.92M     DISK        00:00:00     09-APR-21
            BP Key: 6   Status: AVAILABLE  Compressed: NO  Tag: CORRUPT_BLK_FILE_BKP
            Piece Name: /myopt/back/08vrrckk_1_1
      List of Datafiles in backup set 6
      File LV Type Ckp SCN    Ckp Time  Abs Fuz SCN Sparse Name
      ---- -- ---- ---------- --------- ----------- ------ ----
      5       Full 1852746    09-APR-21              NO    /myopt/datafile/df001.dbf
    
    
    RMAN>
    

     如果我的这个备份动作没有出错,那么就还有得玩。继续下面的步骤:

    把刚才这个数据文件的备份,恢复到某一个新目录下:

    RMAN> run {
     set newname for datafile 5 to '/myopt/dfcopy/mytst_RESTORED.dbf';
     restore datafile 5 from tag 'CORRUPT_BLK_FILE_BKP';
     }
    

     此时,可以看到产生了一个 copy:

    RMAN> list copy;
    
    specification does not match any control file copy in the repository
    specification does not match any archived log in the repository
    List of Datafile Copies
    =======================
    
    Key     File S Completion Time Ckp SCN    Ckp Time        Sparse
    ------- ---- - --------------- ---------- --------------- ------
    1       5    A 09-APR-21       1852746    09-APR-21       NO
            Name: /myopt/dfcopy/mytst_RESTORED.dbf
    
    
    RMAN> list backup;
    
    
    BS Key  Type LV Size       Device Type Elapsed Time Completion Time
    ------- ---- -- ---------- ----------- ------------ ---------------
    6       Full    23.92M     DISK        00:00:00     09-APR-21
            BP Key: 6   Status: AVAILABLE  Compressed: NO  Tag: CORRUPT_BLK_FILE_BKP
            Piece Name: /myopt/back/08vrrckk_1_1
      List of Datafiles in backup set 6
      File LV Type Ckp SCN    Ckp Time  Abs Fuz SCN Sparse Name
      ---- -- ---- ---------- --------- ----------- ------ ----
      5       Full 1852746    09-APR-21              NO    /myopt/datafile/df001.dbf
    

     然后,可以用这个copy,来执行 block recover ,来刷掉坏块:

    RMAN> blockrecover datafile 5 block 150 FROM DATAFILECOPY;
    
    Starting recover at 09-APR-21
    using target database control file instead of recovery catalog
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: SID=70 device type=DISK
    
    starting media recovery
    media recovery complete, elapsed time: 00:00:00
    
    Finished recover at 09-APR-21
    
    RMAN>
    

     接下来,再次用 RMAN validate 检查,看看坏块是否消失。如果不再报坏块了,就可以删除掉这一份copy 了:

    RMAN> delete datafilecopy '/myopt/dfcopy/mytst_RESTORED.dbf';
    
    using target database control file instead of recovery catalog
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: SID=70 device type=DISK
    List of Datafile Copies
    =======================
    
    Key     File S Completion Time Ckp SCN    Ckp Time        Sparse
    ------- ---- - --------------- ---------- --------------- ------
    1       5    A 09-APR-21       1852746    09-APR-21       NO
            Name: /myopt/dfcopy/mytst_RESTORED.dbf
    
    
    Do you really want to delete the above objects (enter YES or NO)? yes
    deleted datafile copy
    datafile copy file name=/myopt/dfcopy/mytst_RESTORED.dbf RECID=1 STAMP=1069396865
    Deleted 1 objects
    
    RMAN>
    


      

  • 相关阅读:
    Hadoop基础(五十四):基于centos搭建Hadoop3.x完全分布式运行模式
    FLINK基础(111): DS算子与窗口(22)窗口 (8) 自定义窗口(3)清理器(EVICTORS)
    FLINK基础(110): DS算子与窗口(21)窗口 (6) 自定义窗口(2)触发器(Triggers)
    FLINK基础(109): DS算子与窗口(20)窗口 (5) 自定义窗口(1) 窗口分配器(window assigners)
    neutron-dhcp-agent
    Firecracker 线程
    kata-containers Compile And Installed
    katacontainer debug
    katka-container搭建
    git切换分支
  • 原文地址:https://www.cnblogs.com/gaojian/p/14636801.html
Copyright © 2020-2023  润新知