暂无图片
NFS挂载点为根目录下时,NFS故障导致Oracle数据库实例HANG,故障分析及验证
最近更新:2023-04-14 10:55:57

适用范围

确认影响版本: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 Server 安装

检查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
......