今天又有一台Oracle 10.2.0.1数据库出现故障,开发人员报告说:无法通过监听正常连接。
登录服务器检查,发现cpu idle为0,并且大量oracle进程占用很高cpu:
top - 15:38:03 up 198 days, 21:57, 3 users, load average: 35.73, 34.97, 31.51 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND |
并且此时sys用户无法登录sqlplus:
[oracle@itflow2 ~]$ sqlplus "/ as sysdba" [oracle@itflow2 ~]$ |
并且检查系统发现,系统上有两个listener进程,其中一个是另外一个的子进程:
[oracle@itflow2 ~]$ ps -ef | grep tnslsnr oracle 24644 1 12 02:50 ? 00:01:23 /opt/oracle/product/10.2.1/bin/tnslsnr LISTENER -inherit oracle 29732 24644 1 30 15:50 ? 00:03:23 /opt/oracle/product/10.2.1/bin/tnslsnr LISTENER -inherit oracle 25804 25762 0 16:18 pts/0 00:00:00 grep tnslsnr |
之前已经碰到过这个Bug,Metalink有关于这个Bug的解释和解决方案,Bug号为:4518443
Oracle的解释为: Oracle 10g在系统较大压力下,listener进程会spawn一个子进程,导致listener进程hang住:
Bug 4518443 Listener hang under loadThis note gives a brief overview of bug 4518443.Affects:
Fixed:
DescriptionThe listener process can hang under load while spawning a process. The last process the listener spawned will have a stack which includes a mutex lock call in ons_atfork_prepare(). |
其实以前有一台Oracle 10g的服务器也碰到过这个Bug,当时根据Metalink的解决方案,在listener.ora文件里添加下面一行:
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFF
但是,后来感觉这个参数设置并没有生效,那台Oracle服务器仍然有这个Bug。
看来只有将Oracle升级为10.2.0.3了。 也许这是一个彻底的解决方法。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7220098/viewspace-166466/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7220098/viewspace-166466/