今天有个比较老的系统启动的时候报错了:
[findb@oraprod]$ sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.6.0 - Production on Wed Nov 28 23:15:22 2012
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 3887045192 bytes
Fixed Size 748104 bytes
Variable Size 2264924160 bytes
Database Buffers 1610612736 bytes
Redo Buffers 10760192 bytes
Database mounted.
ORA-27061: skgfospo: waiting for async I/Os failed
IBM AIX RISC System/6000 Error: 22: Invalid argument
ORA-27061: skgfospo: waiting for async I/Os failed
IBM AIX RISC System/6000 Error: 22: Invalid argument
ORA-27061: skgfospo: waiting for async I/Os failed
IBM AIX RISC System/6000 Error: 22: Invalid argument
ORA-27061: skgfospo: waiting for async I/Os failed
IBM AIX RISC System/6000 Error: 22: Invalid argument
从报错内容来看这个是和AIX的异步io参数设置有关,Google了一下,发现者竟然还是AIX在5300-06上的一个Bug:IZ03260: LIO_LISTIO FAILS TO UPDATE AIO CONTROL BLOCKS ON ERROR APPLIES TO AIX 5300-06。
这个由于异步IO引起的问题,在AIX 5.3 TL3下,使用文件系统,打开Oracle的异步IO选项的时候,经常会出现。
当异步IO的请求(队列)超出MAXREQS的时候,由于AIX上AIOWAIT的问题,会导致返回值是错误的,Oracle发现
该错误后,就会出现问题。如果正好是某些重要的后台进程碰到这样的错误,会导致数据库宕掉。
解决方法(三选一,其中第二和第三可以一起使用):
1、关闭数据库的异步IO(最后没办法的时候采取的措施)
2、修改异步IO参数,加大MAXREQS到8192,甚至16384
chdev -l aio0 -a maxreqs=16384 --或者8192
要不启动系统,动态修改请使用下面命令(临时设置,重启不起作用)
aioo -o maxreqs=16384 或者 8192
3、安装IBM的IZ03260补丁包
【Oracle官文】
Database Crashes With ORA-27061 on AIX [ID 452866.1] |
修改时间:2012-7-20类型:PROBLEM状态:PUBLISHED优先级:3 |
In this Document
Applies to:
Oracle Server -Enterprise Edition - Version 9.2.0.8 to 11.1.0.7 [Release 9.2 to 11.1]
IBM AIX on POWER Systems (64-bit)
***Checked for relevance on 20-Jul-2012***
-- Problem Statement:
Periodical database crashes on AIX with the following errors:
ORA-27061:skgfospo: waiting for async I/Os failed
IBM AIX RISC System/6000 Error: 22: Invalid argument
Oracle is waiting for an async. I/O tocomplete.
aiowait() is the operating System functionon AIX to handle these things and it did not return the requested data in anappropriate time to complete the I/O.
The problem is always encountered by the DBWR processes by AIX BUG for
* Systems running AIX 5.3 with the bos.rte.aio fileset at the 5.3.0.60or 5.3.0.61 level.
Please refer to
IZ03260: LIO_LISTIO FAILS TO UPDATE AIO CONTROL BLOCKS ONERROR ( http://www-1.ibm.com/support/docview.wss?uid=isg1IZ03260)
NOTE:
The issue may affect any Oracle version running on (and certified for) theactual AIX version (including TL and SP) that would include this bos.rte.aiofileset.
For certification, please refer to My Oracle Support.
For specific install requirements, please refer to Note 169706.1
Increase the max limit for AIO requests(maxreqs) using the chdev command.
The command to make the change permanent after reboot is:
chdev -l aio0 -amaxreqs=<value>
The command to make the change effective dynamically is:
aioo -omaxreqs=<value>
To check current Setting for maximum requests (maxreqs) :
lsattr -El aio0
Or Install Fix APAR IZ03260.
Prior availability of IZ03260, and interimfix is available from:
ftp://ftp.software.ibm.com/aix/efixes/iz03260/
As a workaround, DBWR IO slaves can beincreased to handle the IO workload. However, this is an issue that needto get addressed to the hardware vendor (IBM) to check the driver and I/Osystem.
-- To implement the workaround, pleaseexecute the following steps::
SQL> altersystem set DBWR_IO_SLAVES = 4 scope=spfile;
SQL> shutdown immediate
SQL> startup
【IBM官文】
IZ03260: LIO_LISTIO FAILS TO UPDATE AIOCONTROL BLOCKS ON ERROR APPLIES TO AIX 5300-06
窗体顶端
You can track all active APARs for thiscomponent.
窗体底端
When the maximum requests (maxreqs) isexceeded,
lio_listio
will update the control blocks but may notreturn an
error
to indicate that some IOs were not started.This results
in
an unexpected EINVAL from aio_nwait laterwhen these IOs
are waited for.
****************************************************************
* USERS AFFECTED:
* Systems running AIX 5.3 with thebos.rte.aio fileset at the
* 5.3.0.60 or 5.3.0.61 level.
* This problem is known to affect Oracle.
****************************************************************
* PROBLEM DESCRIPTION:
* When the maximum requests (maxreqs) isexceeded, lio_listio
* will update the control blocks, but maynot return an error
* to indicate that some I/Os were notstarted. This results
* in an unexpected EINVAL from aio_nwaitlater when these I/Os
* are waited for.
* Errors similar to the following may belogged by Oracle:
* ORA-27061: waiting for async I/Os failed
* IBM AIX RISC System/6000 Error: 22:Invalid argument
****************************************************************
* RECOMMENDATION:
* Increase the max limit for AIO requestsusing the chdev
* command.
* Install APAR IZ03260.
* Prior availability of IZ03260, andinterim fix is available
* from: ftp://ftp.software.ibm.com/aix/efixes/iz03260/
****************************************************************
lio_listio should return proper error codes
on failures.
*********
* HIPER *
*********
5300-06 - use AIX APAR IZ03260
5300-07 - use AIX APAR IZ03475
IZ03260
AIX 5.3
5765G0300
530
CLOSED PER
NoPE
YesHIPER
2007-08-17
2007-08-20
2007-12-06
APAR is sysrouted FROM one or more of the following:
APAR is sysrouted TO one or more of the following:
AIX 5.3
5765G0300
UP07/11/28 I 1000
U812745 bos.rte.aio5.3.0.62