问题背景:
Oracle数据库日志出现大量的WARNING: ASM communication error: op 0 state 0x0 (15055)错误
问题分析:
首先检查ASM实例的状态,尝试通过sqlplus / as sysasm连接asm实例,出现Connected to an idle instance连接asm实例失败
检查ASM实例的后台日志在出现WARNING: ASM communication错误之后,日志没有再写入,asm实例看起来是出现了异常
按照之前遇到过的处理经验Oracle-ASM communication error问题处理,检查sqlnet.ora的配置以及grid用户的属主权限,都没有发现异常的配置
使用strace对sqlplus / as sysasm的登陆过程进行跟踪
strace -f -F -o /tmp/asm_straceout.txt sqlplus / as sysasm
因为asm实例默认用的是AMM自动内存管理,会使用到共享内存挂载目录/dev/shm
在目录下生成ora_+ASM1_xxxx_o文件
检查挂载目录/dev/shm下的文件,发现目录下的文件都被清理了,目录文件为0
问题原因到这里已经被发现,asm实例在共享内存挂载目录/dev/shm下的文件ora_+ASM1_xxxx_o被清理导致的异常
问题解决:
对于/dev/shm下的文件被清理这种情况,只能通过重启节点的集群让asm实例重新生成ora_+ASM1_xxxx_o文件恢复。