设置侦听IP鉴权一段时间后侦听挂死

某省的数据库时不时的发生侦听挂死的现象。我们来看看具体的情况:

当出现侦听挂死的时候,sqlplus登录会出现如下报错:

而此时,可以看到listener.log中的内容为:

检查当时的主机内存情况:

我们看到其实还是有大约4.4G的内存剩余的。

该数据库由于要求安全加固,在侦听的sqlnet.ora文件中设置了IP鉴权,配置如下:

当时初步的怀疑是listener.log太大(已经有2.1G多),就用>listener.log的方式先把listenr.log清空了,但是发现还是挂死,还是无法连接,为了先恢复应用,尝试重启侦听。

但是lnsrctl stop的方式也挂死,没办法,只能用kill -9的方式杀掉tnslsnr进程,再次lsnrctl start,恢复正常。

很奇怪的一个,为什么内存还有大量剩余的情况下,侦听会挂死?

提交了一个tar给oracle,oracle给出的解释是因为listener.log太大,所以挂死的。oracle建议控制listener.log的大小低于30M。

虽然我不是很相信这个解释,我是比较怀疑IP鉴权引起的问题,因为同时设置IP鉴权的2个省,一个没事,一个有事。出事的那个省,在hang住之前的listener.log中可以发现大量的拒连信息:

不过我还是按照建议进行了配置:将listener.log配置成不写日志:LOGGING_LISTENER=OFF

9天后,再次发生侦听挂死的现象。此时listener.log的大小是0.幸好当时我要求不关闭tar,进行监控2个月。我再次update了这个tar,并且提醒oracle,IP鉴权和侦听的挂死是否有关系,是否有类似的bug?

oracle 2天时间没回我,没办法,打800进行escalate tar,并且要求SDM关注该tar。

最后,oracle确认有2个类似的bug:Bug: 3896886 和Bug 3908058

在8i中,由于配置了protocol.ora validnode_checking,当不在IP列表范围的机器尝试连接数据时,将导致内存泄漏。

我确实配置了类似于像8i的IP鉴权,也确实存在不在IP信任列表中的连接。通过trace找到这些IP。在sqlnet.ora中添加:

然后lsnrctl reload。

找到了2个对应的IP,和主机工程师联系后,发现这2个IP可以不连数据库,在防火墙上直接将其拦截。

目前已经半个月过去了,再没有发生侦听挂死的现象。

相关文章

一条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据