美文网首页我爱编程
【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