oracle9I坏块错误
在一个客户的9201 for Windows数据库中发现了这个错误。
数据库经常出现CRASH的问题,检查后发现,在出现CRASH之前,ALERT中记录了下面的错误:
Fri Jan 28 15:13:58 2011
KCF: write/open error block=0x300019 online=1
file=9 D:ORACLEORADATASXNCSWUSERS01.DBF
error=27069 txt: 'OSD-04026: 传递的参数无效。 (OS 3145753)'
Fri Jan 28 15:13:58 2011
Errors in file d:oracleadminsxncswbdumpsxncsw_dbw0_1504.trc:
ORA-01242: data file suffered media failure: database in NOARCHIVELOG mode
ORA-01114: IO error writing block to file 9 (block # 3145753)
ORA-01110: data file 9: 'D:ORACLEORADATASXNCSWUSERS01.DBF'
ORA-27069: skgfdisp: attempt to do I/O beyond the range of the file
OSD-04026: 传递的参数无效。 (OS 3145753)
DBW0: terminating instance due to error 1242
Fri Jan 28 15:14:00 2011
Errors in file d:oracleadminsxncswbdumpsxncsw_pmon_1480.trc:
ORA-01242: data file suffered media failure: database in NOARCHIVELOG mode
Instance terminated by DBW0, pid = 1504
Dump file d:oracleadminsxncswbdumpalert_sxncsw.log
从ORA-27069错误和OSD-4026错误的信息不难看出,这些错误一般和操作系统命令有关,最后出现了ORA-1242错误,且数据库出现了CRASH。
查询metalink发现,这是Windows环境下Oracle9i的一个bug:1668488。这个bug影响NT环境9.2.0.3以前版本的数据库,当数据文件大小超过4G并尝试扩展,就可能导致这个文件的读写错误,对于ARCHIVELOG模式可能导致数据文件需要恢复,而对于NOARCHIVELOG模式,则会导致CRASH。
而Windows是2003,数据库版本是9.2.0.1,检查发现这个USERS表空间的大小已经达到了4G,难怪频繁出现CRASH的问题。
除了升级操作系统和数据库版本外,解决这个问题的最简单的办法就是多建立几个数据文件,来避免单个文件超过4G的情况。
应急措施为重新启动数据库服务器。
DBV file=D:\ORACLE\ORADATA\DSSDB1\WS6.ORA blocksize=8192
检查没有错误。重新启动后一切正常
以上经过试验,可以解决这个问题,但是不能保证所有平台和所有oracle9.2.0.1都会报这个错误,真纠结。