« Oracle10.2.0.2强制性补丁发布通知 | Blog首页 | 怀柔百泉山 秋意方正浓 »
系统表空间IO错误 数据损坏处理一则
链接:https://www.eygle.com/archives/2006/10/system_tbs_io_corruption.html
同事最近遇到一个数据库问题,说是系统表空间出现坏块,警告日志文件中不断出现如下错误:
[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=8192DBVERIFY: 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 completeTotal 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文章:
By eygle on 2006-10-27 19:30 | Comments (10) | Case | 947 |
数据块损坏,属于逻辑上损坏?用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的功能。
感谢!