Bad header found during buffer read

一个客户的数据库遭遇突然的服务停止,基本的信息为”oracle 9201+windows server 2003 32bit”。客户反馈,在某天晚上,开发人员发现连接不上数据库了,于是登上服务器
发现,OracleServiceSid的服务异常停止了。。。。查看oracle的alert.log发现如下信息。

Current log# 3 seq# 114865 mem# 0: D:ORACLEORADATASINITEKREDO03.LOG
***
Corrupt block relative dba: 0x03c1f9d9 (file 15, block 129497)
Bad header found during buffer read
Data in bad block –
type: 6 format: 2 rdba: 0x03c1f9e0
last change scn: 0x0000.07474aa1 seq: 0x1 flg: 0x06
consistency value in tail: 0x4aa10601
check value in block header: 0xdff2, computed block checksum: 0x0
spare1: 0x0, spare2: 0x0, spare3: 0x0
***

最初怀疑是corrupt block的问题。于是根据file_id=15,block 129497来定位损坏的block位置。
SQL> select file_id,file_name from dba_data_files;
FILE_ID FILE_NAME
———- ———————————————
15 D:ORACLEORADATAXXXXXXCSJJ.ORA

使用dbv工具来检查此数据文件坏块的问题。
C:Documents and SettingsAdministrator>dbv blocksize=8192 file=D:ORACLEORADATAXXXXXCSJJ.ORA

DBVERIFY: Release 9.2.0.1.0 – Production on 星期一 12月 26 09:54:37 2011

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

DBVERIFY – 验证正在开始 : FILE = D:ORACLEORADATAXXXXXXCSJJ.ORA

DBVERIFY – 验证完成

检查的页总数 :332800
处理的页总数(数据):131350
失败的页总数(数据):0
处理的页总数(索引):95869
失败的页总数(索引):0
处理的页总数(其它):3429
处理的总页数 (段) : 0
失败的总页数 (段) : 0
空的页总数 :102152
标记为损坏的总页数:0
汇入的页总数 :0

擦。。。竟然没查出来坏块,下面来定位坏块的位置。

select owner,segment_name,tablespace_name from dba_extents where file_id=15 and 129497 between block_id and block_id+blocks-1
owner segment_name tablespace_name
—— ————- —————-
GSXX FNDXXXX CSXX

对FNDXXXX做查询,看看是否报错,分别”走索引”、”不走索引”

select /*+ no_index(GSXX.FNDXX GSXX.PK_FNDXX) */ count(*) from GSXX.FNDXX
返回结果正常

再尝试走索引的查询
select count(*) from GSXX.FNDXX
结果集返回也正常。。

擦。。。。有点没头绪了。alert中有”corrupt”的信息,但是dbv、正常的查询都没有遭遇报错,而且db在手工重启OracleServiceSID之后,运行正常,暂时没有遭遇报错,客户问我怎么回事。。我只能说:先走着瞧吧。。

–EOF–