确认影响版本:10.2.0.1 - 10.2.0.5 可能影响版本:10.2.0.5以上 操作系统AIX 64/32位
案例环境为: AIX 6.1 + ORACLE 10.2.0.5 RAC 数据库实例突然出现HANG,alert日志未有错误提示,操作系统df -g命令出现:
NFS server *.*.*.* not responding still trying
同时数据库sqlplus hang无法登录进入数据库,后续NFS恢复后数据库实例随之恢复正常。
通过故障现象判断,该问题较为符合如下两篇mos提到的NFS故障导致数据库实例HANG的案例:
When NFS Server Is Down, Oracle Server Freezes With No Errors In Alert Log File (Doc ID 1316251.1)
Disconnected NFS Mount Point Causes Instance to Hang on AIX (Doc ID 1445600.1)
参考MOS文档,该问题主要原因为Oracle在UNIX系统中,通过调用系统函数getcwd->getwd->stat的方式顺序处理目录条目,后续的方法是对每个条目执行statx调用,在进程执行过程中,Oracle会调用该方法扫描根目录下的所有目录,而当根目录下挂载的NFS丢失时,statx扫描目录将会被阻塞,进而导致Oracle hang的情况出现。
由于故障时期较短,并未使用truss命令进行分析,为进一步验证问题原因,经客户同意后,分别在同版本的DG备库、Oracle 11g + AIX 7.2的测试环境进行故障复现:
检查nfs是否安装
# rpm -qa nfs*
nfs-utils-1.3.0-0.68.el7.x86_64
配置NFS
#创建测试目录
# mkdir -p /nfstest
#编辑配置文件
# vi /etc/exports
/nfstest *.*.*.0/24(rw,sync,insecure,no_subtree_check,no_root_squash)
/nfstest *.*.*.0/24(rw,sync,insecure,no_subtree_check,no_root_squash)
#启动nfs服务,并检查服务状态
# systemctl start rpcbind.service
# systemctl start nfs.service
# showmount -e localhost
Export list for localhost:
/nfstest *.*.*.0/24,*.*.*.0/24
#分别在两套测试环境挂载NFS
#查看nfs挂载列表
#showmount -e *.*.*.148
export list for *.*.*.148:
/nfstest *.*.*.0/24,*.*.*.0/24
#创建并挂载目录
# mkdir /nfstest
# mount *.*.*.148:/nfstest /nfstest
#检查挂载结果--11g
# df -g
Filesystem GB blocks Free %Used Iused %Iused Mounted on
/dev/hd4 150.00 40.09 74% 158519 2% /
/dev/hd2 20.00 13.97 31% 88107 3% /usr
/dev/hd9var 15.00 14.86 1% 1644 1% /var
/dev/hd3 15.00 12.10 20% 11836 1% /tmp
/dev/hd1 20.00 3.52 83% 8905 2% /home
/dev/hd11admin 5.00 5.00 1% 5 1% /admin
/proc - - - - - /proc
/dev/hd10opt 20.00 14.65 27% 48250 2% /opt
/dev/livedump 1.00 1.00 1% 4 1% /var/adm/ras/livedump
/ahafs - - - 36 1% /aha
/dev/fslv01 6000.00 2541.76 58% 28918 1% /backup
/dev/loop1 6.38 0.00 100% 3346878 100% /cdrom
*.*.*.106:/oraclebackup 30714.86 3370.36 90% 564081 8% /oraclebackup
*.*.*.10:/*bak 40960.00 37487.03 9% 93162521 2% /orabak/*bak