日期:2014-05-16  浏览次数:20389 次

oracle9I的坏块错误。
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

检查没有错误。重新启动后一切正常

以上转载了一大部分,测试成立,但是并不是所有地方的该版本在任意情况下,都会发生。即:任意oracle版本在任意操作系统平台,只要到了4G后都会出现该错误。这句话是不对的。 附件含有一个alert.log,方便各位一起研究。