早上巡检realsync时发现数据库宕掉了,查看alert发现如下报错:

Thu Dec 18 22:26:18 2014

KCF: read, write or open error, block=0x72d online=1

        file=1 '/oradata/****/temp01.dbf'

        error=27063 txt: 'IBM AIX RISC System/6000 Error: 28: No space left on device

Additional information: -1

Additional information: 131072'

Errors in file /u01/app/diag/rdbms/**/***/trace/sjjz_dbw1_418098.trc:

Errors in file /u01/app/diag/rdbms/**/**/trace/sjjz_dbw1_418098.trc:

ORA-63999: data file suffered media failure

ORA-01114: IO error writing block to file 1025 (block # 1837)

ORA-01110: data file 1025: '/oradata/**/temp01.dbf'

ORA-27063: number of bytes read/written is incorrect

IBM AIX RISC System/6000 Error: 28: No space left on device

Additional information: -1

Additional information: 131072

DBW1 (ospid: 418098): terminating the instance due to error 63999

从报错No space left on device,怀疑系空间不足导致的,df查看果然/oradata文件系统剩余空间为0,占用率为100%;

进一步查看temp01.dbf数据库文件属性:

1 /oradata/sjjz/temp01.dbf 1 TEMP 30408704 3712 ONLINE 1 YES 34359721984 4194302 80 29360128 3584

autoextensible为yes,即可以自动对数据文件进行扩展,最大空间为34359721984,31GB。

当io写入时发现已经没有空间写入了,instance abort!


在bing中查询这个ora-63999,果然发现oracle 11g存在这个问题,是由一个隐藏的启动参数决定的,

隐藏参数‘_datafile_write_errors_crash_instance’是在Oracle 11.2.0.1开始导入的,

主要的机能是在,数据文件(sysytem以外表空间)I/O读写错误被发现时,对实例的down进行管理。

Oracle 11.2.0.1 的初始值是

_datafile_write_errors_crash_instance = FALSE

数据文件(sysytem以外表空间)I/O读写错误被发现时,在归档模式下,发生错误的数据文件

被OFFLINE,实例不会down。


Oracle 11.2.0.2开始初始值变成TRUE

_datafile_write_errors_crash_instance = TRUE

因为I/O错误,数据文件读写失败被发现时,ORA-63999错误出力,实例down。

后又查看一篇文章:http://blog.itpub.net/23718752/viewspace-1122411

这个作者说这是oracle11g一个bug,从11.2.0.2就解决了,但是我这个系统是oracle 11.2.0.4,按照文章作者的说明从11.2.0.2在归档模式下不会出现instance abort,我这个数据库是非归档模式的,这个就需要验证下了,有时间在验证下,到时把结果在补充上来。