在一个客户的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是2000,数据库版本是9.2.0.1,检查发现这个USERS表空间的大小已经达到了31G,难怪频繁出现CRASH的问题。
SQL> SELECT A.TABLESPACE_NAME, TOTAL, FREE, FREE/TOTAL*100 PCT_FREE
2 FROM (SELECT TABLESPACE_NAME, SUM(BYTES)/1024/1024/1024 TOTAL FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME) A,
3 (SELECT TABLESPACE_NAME, SUM(BYTES)/1024/1024/1024 FREE FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) B
4 WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME(+);
TABLESPACE_NAME TOTAL FREE PCT_FREE
------------------------------ ---------- ---------- ----------
CWMLITE .01953125 .010375977 53.125
DATA 29.296875 27.2373657 92.9702083
DRSYS .01953125 .010070801 51.5625
EXAMPLE .145874023 .000488281 .334728033
INDX 2.9296875 2.92962646 99.9979167
ODM .01953125 .010375977 53.125
PERFSTAT 2 1.88787842 94.3939209
SYSTEM .439453125 .006530762 1.48611111
TOOLS .009765625 .003845215 39.375
UNDOTBS1 2.97851563 .035827637 1.20286885
USERS 31.4990234 1.23046875 3.90637111
XDB .037231445 .000183105 .491803279
已选择12行。
除了升级操作系统和数据库版本外,解决这个问题的最简单的办法就是多建立几个数据文件,来避免单个文件超过4G的情况。