oracle数据库使用nfs数据文件异常时加锁的删除

来源:互联网 发布:菊正宗化妆水 知乎 编辑:程序博客网 时间:2024/05/17 15:57

以前曾经遇到过这个问题,当时解决后没有记录下来, 结果今天又遇到了.

同事调整网络,结果数据库机器无法访问NAS,导致许多数据库异常, 重新启动后, 也提示一些文件被别人使用.

实际上与NFS的锁定有关. 由于NFS文件在访问时,在nfs的客户端,提出锁的要求,而在nfs服务器上, 保留着这些锁定信息.

当nfs客户端出现异常时,在某些特殊的情况下,这些锁定信息将会保留下来,从而当oracle数据库需要重新锁定时,导致失败.

例如今天一个数据库其控制文件无法锁定,导致无法mount,利用truss可以观测到:

open("/dbfiles_ssz0001dor/hkwmip01/control01.ctl", O_RDWR|O_DSYNC) = 16
getrlimit(RLIMIT_NOFILE, 0xFFFFFD7FFFDFE710)    = 0
fcntl(16, F_DUPFD, 0x00000100)                  = 256
close(16)                                       = 0
fcntl(256, F_SETFD, 0x00000001)                 = 0
ioctl(256, 0x0403, 0xFFFFFD7FFFDFE6CC)          Err#25 ENOTTY
fstatvfs(256, 0xFFFFFD7FFFDFE698)               = 0
ioctl(256, _ION('f', 76, 0), 0x00000000)        = 0
fcntl(256, F_GETFL)                             = 8258
fcntl(256, F_SETLK, 0xFFFFFD7FFFDFE740)         Err#11 EAGAIN
fcntl(256, F_GETLK, 0xFFFFFD7FFFDFE740)         = 0
close(256)                                      = 0
可以看到F_SETLK提示失败,所以在alert文件中提示控制文件已经被使用.

解决的方法是执行clear_locks来要求nfs服务器释放锁,

#clear_locks -s 192.168.0.226
Clearing locks held for NFS client ssz0001dor on server 192.168.0.226
clear of locks held for ssz0001dor on 192.168.0.226 returned success
处理后,重新mount数据库,随后正常处理即可.

 

 

0 0
原创粉丝点击