美文网首页我爱编程
【Oracle】坏块处理一例

【Oracle】坏块处理一例

作者: 拾荒者charley | 来源:发表于2018-04-09 10:20 被阅读0次

    前言:今天程序后台告警如下,初步判断就是数据所在的硬盘有坏块,下面简单记录下处理流程。

    一、程序告警

    1.png

    二、dev检测

    从程序上告警可以看到文件号4,块号2858634所在的数据库损坏,我们查看文件号4所在的文件名。

    SQL> select file_id,file_name from dba_data_files where file_id=4;
    
       FILE_ID FILE_NAME
    ---------- ----------------------------------------
         4 /u01/oracle/oradata/wxdb/users01.dbf
    

    使用dev检测

    [oracle@weixindb ~]$ dbv file='/u01/oracle/oradata/wxdb/users01.dbf'
    
    DBVERIFY: Release 11.2.0.3.0 - Production on Mon Apr 9 09:40:44 2018
    
    Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
    
    DBVERIFY - Verification starting : FILE = /u01/oracle/oradata/wxdb/users01.dbf
    
    DBV-00200: Block, DBA 19635850, already marked corrupt
    csc(0x0000.1de576e3) higher than block scn(0x0000.00000000)
    Page 2858634 failed with check code 6054
    
    
    DBVERIFY - Verification complete
    
    Total Pages Examined         : 4193600
    Total Pages Processed (Data) : 1223652
    Total Pages Failing   (Data) : 0
    Total Pages Processed (Index): 2890057
    Total Pages Failing   (Index): 1
    Total Pages Processed (Other): 57814
    Total Pages Processed (Seg)  : 0
    Total Pages Failing   (Seg)  : 0
    Total Pages Empty            : 22077
    Total Pages Marked Corrupt   : 1
    Total Pages Influx           : 0
    Total Pages Encrypted        : 0
    Highest block SCN            : 2094114815 (0.2094114815)
    

    从上面可以看到确实存在一个坏块

    三、查看坏块所在的对象

    SQL> SELECT tablespace_name, segment_type, owner,segment_name, partition_name FROM dba_extents WHERE file_id=6 and 2858634 between block_id AND block_id+blocks-1;
    
    TABLESPACE_NAME            SEGMENT_TYPE   OWNER              SEGMENT_NAME                                      PARTITION_NAME
    ------------------------------ ------------------ ------------------------------ --------------------------------------------------------------------------------- ------------------------------
    USERS                  INDEX          WEIXIN             RECORD_ID
    

    因为我这里坏块问题已经解决了,所以另外指定了一个file_id,可以看到坏块所在的对象是一个索引,那么这个问题就比较好解决了,通过重建索引即可解决。

    四、在线重建索引

    查看索引所在的表

    SQL> select table_name,index_name from dba_indexes where index_name = 'RECORD_ID';
    
    TABLE_NAME             INDEX_NAME
    ------------------------------ ------------------------------
    ZJOL_WINNING_RECORD        RECORD_ID
    

    重建索引

    alter index idx_xxx rebuild online;
    

    相关文章

      网友评论

        本文标题:【Oracle】坏块处理一例

        本文链接:https://www.haomeiwen.com/subject/atubhftx.html