zoukankan      html  css  js  c++  java
  • 利用RMAN检测数据库坏块的脚本

    虽然我们也可以通过dbv(db file verify)工具做到对单个数据文件的坏块检测,但是直接使用RMAN的"backup validate check logical database;"结合V$DATABASE_BLOCK_CORRUPTION视图要方便地多。 Script:
    1) $ rman target / nocatalog
    
    2) RMAN> run {
    allocate channel d1 type disk;
    allocate channel d2 type disk;
    allocate channel d3 type disk;
    allocate channel d4 type disk;
    backup validate check logical database;
    }
    
    3) select * from V$DATABASE_BLOCK_CORRUPTION ;
    
    REM www.oracledatabase12g.com & www.askmaclean.com
    
    4) If V$DATABASE_BLOCK_CORRUPTION contains rows please run this query to 
    find the objects that contains the corrupted blocks:
    
    
    SELECT e.owner,
           e.segment_type,
           e.segment_name,
           e.partition_name,
           c.file#,
           greatest(e.block_id, c.block#) corr_start_block#,
           least(e.block_id + e.blocks - 1, c.block# + c.blocks - 1) corr_end_block#,
           least(e.block_id + e.blocks - 1, c.block# + c.blocks - 1) -
           greatest(e.block_id, c.block#) + 1 blocks_corrupted,
           null description
      FROM dba_extents e, v$database_block_corruption c
     WHERE e.file_id = c.file#
       AND e.block_id <= c.block# + c.blocks - 1
       AND e.block_id + e.blocks - 1 >= c.block#
    UNION
    SELECT s.owner,
           s.segment_type,
           s.segment_name,
           s.partition_name,
           c.file#,
           header_block corr_start_block#,
           header_block corr_end_block#,
           1 blocks_corrupted,
           'Segment Header' description
      FROM dba_segments s, v$database_block_corruption c
     WHERE s.header_file = c.file#
       AND s.header_block between c.block# and c.block# + c.blocks - 1
    UNION
    SELECT null owner,
           null segment_type,
           null segment_name,
           null partition_name,
           c.file#,
           greatest(f.block_id, c.block#) corr_start_block#,
           least(f.block_id + f.blocks - 1, c.block# + c.blocks - 1) corr_end_block#,
           least(f.block_id + f.blocks - 1, c.block# + c.blocks - 1) -
           greatest(f.block_id, c.block#) + 1 blocks_corrupted,
           'Free Block' description
      FROM dba_free_space f, v$database_block_corruption c
     WHERE f.file_id = c.file#
       AND f.block_id <= c.block# + c.blocks - 1
       AND f.block_id + f.blocks - 1 >= c.block#
     order by file#, corr_start_block#;
    
    
    SELECT tablespace_name, segment_type, owner, segment_name
    FROM dba_extents
    WHERE file_id = &fileid
    and &blockid between block_id AND block_id + blocks - 1;
    
    
  • 相关阅读:
    GeneXus笔记本—城市级联下拉
    GeneXus笔记本—获取当月的最后一天
    GeneXus笔记本——创建一个知识库 哈哈哈哈!
    GeneXus笔记本——入门篇
    Android Studio 学习笔记1.1 创建自己的第一个安卓项目并且打包APK
    初入Android Studio的我
    随笔
    在Azuer创建自己的Linux_VM
    获得自己电脑的SSH公匙
    数据库内连接、外连接以及左右连接的区别
  • 原文地址:https://www.cnblogs.com/macleanoracle/p/2968101.html
Copyright © 2011-2022 走看看