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

一、程序告警

【Oracle】坏块处理一例 - 图1

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

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

使用dev检测

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

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

三、查看坏块所在的对象

  1. 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;
  2. TABLESPACE_NAME SEGMENT_TYPE OWNER SEGMENT_NAME PARTITION_NAME
  3. ------------------------------ ------------------ ------------------------------ --------------------------------------------------------------------------------- ------------------------------
  4. USERS INDEX WEIXIN RECORD_ID

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

四、在线重建索引查看索引所在的表

  1. SQL> select table_name,index_name from dba_indexes where index_name = 'RECORD_ID';
  2. TABLE_NAME INDEX_NAME
  3. ------------------------------ ------------------------------
  4. ZJOL_WINNING_RECORD RECORD_ID

重建索引

  1. alter index idx_xxx rebuild online;