问题:
Oracle数据库后台alert日志出现ASM communication error,其他ASM实例,磁盘,集群状态没有异常,应用也没有反馈报错。
问题分析:
一开始检查数据库后台alert日志,发现报错每10分钟出现一次,怀疑是某个定时job发起,但查看了服务器的crontab以及跟用户确认,未发现有每隔10分钟的定时任务。
查看后台的trc文件,发现在报错时间点有对应的trc文件生成,程序均来自db-gather收集程序,跟用户进一步确认该程序为数据库监控信息收集程序,会通过访问v$asm_数据字典查询asm磁盘使用率。
到这里,我们可以确认该报错为数据库信息收集程序查询v$asm_所触发,而报错的原因暂不清楚。
通过Oracle mos查看相关报错的案例,发现大部分都是由于操作系统属主问题,非Oracle用户通过操作系统身份认证sysdba/sysasm登陆导致,但这个并不匹配当前的问题场景,数据库信息收集程序是通过tcp/ip进行远程连接的,非本地登陆。
继续在Oracle mos查看相关案例,发现一个由于GRID_HOME文件sqlnet.ora设置wallet路径导致引发WARNING: ASM communication error: op 0 state 0x0 (15055) 的案例可以进行借鉴。
根据以上案例,sqlnet.ora的配置可能会影响数据库rdbms对asm实例的访问,接下来,检查数据库sqlnet.ora的配置,发现配置了连接加密,这里,我们怀疑很有可能是数据库连接配置了加密导致出现访问asm实例报错。
在跟用户确认加密可以取消之后,我们注释了sqlnet.ora的加密配置(注释配置立即生效不需要reload或者重启监听),在20点36分取消了加密配置之后,数据库后台alert日志就再也没有出现asm的报错,问题得以解决。
问题总结:
Oracle数据库后台alert日志出现ASM communication error报错,是由于sqlnet配置了连接加密导致数据库rdbms去访问asm实例出现报错。
问题修复:
1 通过注释sqlnet文件里面的连接加密配置,取消连接加密修复问题。
2 对数据库配置加密连接,需要谨慎设置,要在测试环境进行充分测试,特别是应用,客户端,集群内部通信连接测试没问题后再上线生产。