eygle.com   eygle.com
eygle.com eygle
eygle.com  
 

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

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

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

[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-


历史上的今天...
    >> 2010-10-27文章:
           蓦然回首 万水千山已过
    >> 2008-10-27文章:
    >> 2005-10-27文章:
    >> 2004-10-27文章:
           Oracle9i新特性:iSQLPLUS

By eygle on 2006-10-27 19:30 | Comments (10) | Case | 947 |

10 Comments

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

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

没了?关键是如何处理?

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

不外如此.

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

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

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

http://tahiti.oracle.com

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

autotrace是sql*plus的功能。

感谢!


CopyRight © 2004~2020 云和恩墨,成就未来!, All rights reserved.
数据恢复·紧急救援·性能优化 云和恩墨 24x7 热线电话:400-600-8755 业务咨询:010-59007017-7040 or 7037 业务合作: marketing@enmotech.com