eygle.com   eygle.com
eygle.com  
 

« Oracle10.2.0.2强制性补丁发布通知 | Blog首页 | 怀柔百泉山 秋意方正浓 »

系统表空间IO错误 数据损坏处理一则

作者:eygle |【转载时请务必以超链接形式标明文章和作者信息及本声明
链接:

同事最近遇到一个数据库问题,说是系统表空间出现坏块,警告日志文件中不断出现如下错误:

[oracle@gdmstest bdump]$ tail -20 alert_mydb.log
Linux Error: 4: Interrupted system call
Additional information: 23710
Wed Oct 25 16:47:44 2006
Errors in file /opt/oracle/admin/mydb/bdump/mydb_smon_19646.trc:
ORA-00604: error occurred at recursive SQL level 1
ORA-01115: IO error reading block from file 1 (block # 23712)
ORA-01110: data file 1: '/opt/oracle/oradata/mydb/system01.dbf'
ORA-27091: skgfqio: unable to queue I/O
ORA-27072: skgfdisp: I/O error
Linux Error: 4: Interrupted system call
Additional information: 23710
Wed Oct 25 16:47:59 2006
Errors in file /opt/oracle/admin/mydb/bdump/mydb_smon_19646.trc:
ORA-00604: error occurred at recursive SQL level 1
ORA-01115: IO error reading block from file 1 (block # 23712)
ORA-01110: data file 1: '/opt/oracle/oradata/mydb/system01.dbf'
ORA-27091: skgfqio: unable to queue I/O
ORA-27072: skgfdisp: I/O error
Linux Error: 4: Interrupted system call
Additional information: 23710

而通过dbv检查又没有报数据块损坏:

[oracle@gdmstest mydb]$ dbv file=system01.dbf blocksize=8192

DBVERIFY: Release 9.2.0.4.0 - Production on Thu Oct 26 11:36:42 2006

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

DBVERIFY - Verification starting : FILE = system01.dbf


DBVERIFY - Verification complete

Total Pages Examined : 23709
Total Pages Processed (Data) : 13000
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 2090
Total Pages Failing (Index): 0
Total Pages Processed (Other): 1377
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 7242
Total Pages Marked Corrupt : 0
Total Pages Influx : 0

我们一起来看看这个问题,首先从错误日志来看,其实这并不是一个数据块损坏的问题:
ORA-01115: IO error reading block from file 1 (block # 23712)

这是个IO错误,数据块不能读取。

而DBV的提示也只是说检查了23709个数据块,这些数据块没有问题,而我们真正报错的数据块是23712号数据块,也就是说DBV检查到这个块附近,无法继续读取,进而退出。

而系统表空间远远大于 23709 * 8k / 1024 = 185M。

此时检查系统日志,dmesg日志中有大量的寻址错误,也就是说硬件出现了故障:

[maintain@gdmstest bdump]$ dmesg
: error=0x40 { UncorrectableError }, LBAsect=58847319, high=3, low=8515671, sector=14266880
end_request: I/O error, dev 03:06 (hda), sector 14266880
hda: dma_intr: status=0x51 { DriveReady SeekComplete Error }
hda: dma_intr: error=0x40 { UncorrectableError }, LBAsect=58847319, high=3, low=8515671, sector=14266880
end_request: I/O error, dev 03:06 (hda), sector 14266880
hda: dma_intr: status=0x51 { DriveReady SeekComplete Error }
hda: dma_intr: error=0x40 { UncorrectableError }, LBAsect=58847319, high=3, low=8515671, sector=14266880
end_request: I/O error, dev 03:06 (hda), sector 14266880
hda: dma_intr: status=0x51 { DriveReady SeekComplete Error }

至此问题被定位。

如果我们尝试cp系统表空间文件,同样会收到硬件的错误提示信息:

[oracle@gdmstest mydb]$ cp system01.dbf system01.dbf.bk
cp: 正在读入‘system01.dbf’: 输入/输出错误
[oracle@gdmstest mydb]$ ll
总用量 2173060
....
-rw-r----- 1 oracle dba 524296192 10月 25 16:49 system01.dbf
-rw-r----- 1 oracle dba 194236416 10月 25 17:00 system01.dbf.bk
...............

只能复制194236416 Bytes,也就是 194236416 / 8192 = 23710.5,同样是读到23709个数据块左右,硬件的损坏就要通过系统的其它手段去解决了。

-The End-

By eygle on 2006-10-27 19:30 | Comments (10) | Posted to Case | Edit |Pageviews:

相关文章 随机文章
  • Oracle中模拟及修复数据块损坏
  • 重建控制文件恢复丢失表空间一例
  • Oracle Wait Event:Data file init write
  • 关于HDS的高端存储设备USPV
  • DMT之后SMON还需要coalesce么?
  • 首届杰出数据库工程师评选终选记行
    数据挖掘文章-数据挖掘技术简介[转载]
    传华友世纪下周将精简部门并裁员30%
    结束假期 回到北京
    2007上海Oracle Open World记事-之三
    网上相关主题:
    Google

    留言 (10)

    数据块损坏,属于逻辑上损坏?用dbv检测数据文件,对生产系统有影响吗?

    Posted by: starlvzhen at October 30, 2006 11:12 AM

    不会影响数据库的使用,但是会有CPU消耗!

    Posted by: eygle at October 30, 2006 11:24 AM

    没了?关键是如何处理?

    Posted by: lemonhat at October 30, 2006 10:29 PM

    硬件故障,要么尝试重新格式化,要么更换硬盘...

    不外如此.

    Posted by: eygle at October 31, 2006 8:45 AM

    在10g下进行插入记录操作,打开Top Session,发现如下统计数据:
    cpu(1/100秒) 343
    PGA内存(字节) 121329608
    物理读取数 5
    逻辑读取数 49711
    语法分析总数 1481
    ……
    如何分析这些数据?能够得到什么结论?
    请指点。

    Posted by: 李寻欢 at November 1, 2006 4:37 PM

    这是统计信息阿,每一类信息代表不同的资源使用等统计信息,Oracle文档上都有详细说明。

    Posted by: eygle at November 1, 2006 5:22 PM

    那个文档上有啊,我买了不少关于Oracle开发和管理的书,也没有看到相关内容阿?请不吝指点迷津。

    Posted by: 李寻欢 at November 1, 2006 10:24 PM

    http://tahiti.oracle.com

    搜索都能找到,不过只支持英文的。
    其实你set autotrace on就能看到所有的相关信息。

    Posted by: eygle at November 2, 2006 12:07 PM

    autotrace是sql*plus的功能。

    Posted by: eygle at November 2, 2006 12:11 PM

    感谢!

    Posted by: 李寻欢 at November 3, 2006 4:59 PM

    发表留言:



    Remember Me?
    (输入验证码后方可评论,谢谢支持)



    CopyRight © 2004 eygle.com, All rights reserved.