首页 » ORACLE, 系统相关 » Troubleshooting RMAN restore controlfile to NFS hang

Troubleshooting RMAN restore controlfile to NFS hang

最近遇到一个案例AIX 7.2 挂转NFS v3(源为Suse 11), RMAN restore 控制文件到NFS上 hang, 检查了AIX端mount选项和权限一切正常,在oracle用户下同样可以cp 和vi 文件,最终发现是因为rpcbind服务未启动导致,简单记录。

1, 检查NFS 版本
mount |grep nfs

2, 检查oracle执行文件权限
ls -l $ORACLE_HOME/bin

3, 检查DB ALert log和rman log

4, debug
操作系统使用truss -aefp <rman pid> -o rman_debug.tuc -d

rman> debug on
rman> xxxx
— or —
rman target / debug trace=xxxx.log

5, 尝试restore 到本地文件系统

restore 到本地文件系统是OK, 原因出在NFS。

— RMAN debug trace

DBGRPC:            krmxpoq - returning rpc_number: 10 with status: STARTED120 for channel ORA_DISK_1
DBGMISC:           ENTERED krmchkintrvl [19:03:48.393]
DBGMISC:            krmsod2s: time is: 29/3/2021 19:3:48 = returning: 1068491028
DBGMISC:           EXITED krmchkintrvl [19:03:48.393] elapsed time [00:00:00:00.000]
DBGMISC:           ENTERED krmkchkhang [19:03:48.393]
DBGMISC:           EXITED krmkchkhang with status 100 [19:03:48.393] elapsed time [00:00:00:00.000]
DBGRPC:            ENTERED krmqgns
DBGRPC:             krmqgns: looking for work for channel default (krmqgns)
DBGRPC:             krmqgns: commands remaining to be executed: (krmqgns)
DBGRPC:             CMD type=RAUT cmdid=1 status=STARTED
DBGRPC:                   1 STEPstepid=1 cmdid=1 status=STARTED devtype=DISK
DBGRPC:             krmqgns: no work found for channel default (krmqgns)
DBGRPC:              (krmqgns)
DBGRPC:            EXITED krmqgns with status 1
DBGRPC:            krmxpoq - returning rpc_number: 10 with status: STARTED120 for channel ORA_DISK_1
DBGMISC:           ENTERED krmchkintrvl [19:03:58.396]
DBGMISC:            krmsod2s: time is: 29/3/2021 19:3:58 = returning: 1068491038
DBGMISC:           EXITED krmchkintrvl [19:03:58.396] elapsed time [00:00:00:00.000]
DBGRPC:            ENTERED krmqgns
DBGRPC:             krmqgns: looking for work for channel default (krmqgns)
DBGRPC:             krmqgns: commands remaining to be executed: (krmqgns)
DBGRPC:             CMD type=RAUT cmdid=1 status=STARTED
DBGRPC:                   1 STEPstepid=1 cmdid=1 status=STARTED devtype=DISK
DBGRPC:             krmqgns: no work found for channel default (krmqgns)
DBGRPC:              (krmqgns)
DBGRPC:            EXITED krmqgns with status 1

Note:
RAUT command 在sleep 10秒反复尝试,猜测是Remore AUTH 认证相关。 查询NFS 认证相关的服务发现有个rpc NFS认证服务,NFS在文件传送或信息传送过程中依赖于RPC协议,去服务端查询RPC服务,网络文件系统(NFS)就是基于RPC协议工作的,NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了传输协议用到这个RPC功能的。可以这么理解RPC和NFS的关系:NFS是一个文件系统,而RPC是负责负责信息的传输。如NFS(客户端)——-Portmap(客户端)——Portmap(服务端)——NFS(服务端),实现RPC协议的软件是RPCbind程序包,进程名称是portmappe, 在rpcbind 使用RPC服务映射到它们所监听的端口,所以NFS依赖RPCbind 和RPCbind.socket 服务。使用rpcinfo查看rpc相关的服务。NFS服务要先检查rpcbind。

发现该服务存在问题未running状态,检查OS LOG

Jun 01 03:57:48 nfs.anbob.com systemd[1]: rpcbind.socket failed to listen on sockets: Address already in use
Jun 01 03:57:48 nfs.anbob.com systemd[1]: Failed to listen on RPCbind Server Activation Socket.
-- Subject: Unit rpcbind.socket has failed

可以看到rpcbind.socket启动失败, Bug 1422090 – Rpcbind does not work in the container 发现有相似BUG. 有些案例是因为IPV6的原因(报错rpcbind.socket failed to listen on sockets: Address family not supported by protocol),影响rpcbind.socket服务, 搞定了rpcbind.socket服务,RMAN 备份也恢复了正常。

其它如果存在防火墙存在时,可以考虑固定NFS端口,增加防火墙访问策略。

但是注意rpcbind存在安全风险,需要配置防火墙加固。 NFS服务器在Red Hat Enterprise Linux 7中支持NFSv2,NFSv3和NFSv4连接。但是,您也可以将NFS配置为仅支持NFS版本4.0和更高版本。由于NFSv4不需要该rpcbind服务在网络上进行侦听,因此可以最大程度地减少系统上打开的端口和正在运行的服务的数量。

当您的NFS服务器配置为仅NFSv4时,尝试使用NFSv2或NFSv3挂载共享的客户端将失败,并显示以下错误:
不支持请求的NFS版本或传输协议。

更多:
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/storage_administration_guide/nfs-serverconfig#nfs4-only
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/storage_administration_guide/s2-nfs-methodology-portmap

打赏

,

对不起,这篇文章暂时关闭评论。