ORA-27086 unable to lock file – already in use导致数据库无法restore控制文件
Jul202015
在恢复数据库的时候遇到ORA-27086 unable to lock file – already in use错误,控制文件无法restore。数据库版本11.2.0.4.0,操作系统版本CentOS 5.11。
RMAN> restore controlfile from '/data/ivldb/lv2_20150720/level_2_ivldb_controfile_1130_1.ctl'; Starting restore at 2015-07-20 13:43:18 using channel ORA_DISK_1 channel ORA_DISK_1: restoring control file RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of restore command at 07/20/2015 13:43:26 ORA-19870: error while restoring backup piece /data/ivldb/lv2_20150720/level_2_ivldb_controfile_1130_1.ctl ORA-19504: failed to create file "/data/ivldb/uatdb/control02.ctl" ORA-27086: unable to lock file - already in use Linux-x86_64 Error: 37: No locks available Additional information: 10
经查询,oracle用户对这块磁盘有读写权限,权限和目录都没有问题,那为什么会有这个问题呢?想了下,确定肯定是nfs挂载的磁盘出了问题,由于本地磁盘空间不足,SA通过nfs挂载的方式,挂了一块磁盘,数据库恢复是先恢复到这块共享磁盘上,然后在之前的数据库确定不需要的时候,删掉之前的数据库再讲数据文件拷贝到本地磁盘上。
[root@SL010A-IVOD01 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 39G 4.3G 33G 12% / /dev/sda1 99M 12M 82M 13% /boot tmpfs 32G 3.9G 28G 13% /dev/shm /dev/sda4 1.1T 969G 30G 98% /data 10.0.97.30:/data/nfs_share 1.8T 1.4T 449G 76% /data/ivldb
通过查看nfs挂载命令,发现没有指定nolock模式。
[root@SL010A-IVOD01 ~]# history | grep mount 944 umount /data/ivldb/ 946 umount /data/ivldb/ 950 mount 10.0.97.30:/data/nfs_share /data/ivalue/
卸载掉这块磁盘,重新指定nolock模式挂载,先关闭数据库(当前是NOMOUNT状态)。
[oracle@SL010A-IVOD01 uatdb]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Mon Jul 20 13:46:38 2015 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> shutdown abort ORACLE instance shut down.
卸载nfs磁盘,指定nolock挂载。
[root@SL010A-IVOD01 ~]# umount /dev/ivldb [root@SL010A-IVOD01 ~]# mount -o nolock 10.0.97.30:/data/nfs_share /data/ivldb
启动数据库到NOMOUNT状态。
SQL> startup nomount ORACLE instance started. Total System Global Area 4275781632 bytes Fixed Size 2260088 bytes Variable Size 2013266824 bytes Database Buffers 2248146944 bytes Redo Buffers 12107776 bytes
进行RMAN恢复控制文件,问题解决。
[oracle@SL010A-IVOD01 ~]$ rman target / Recovery Manager: Release 11.2.0.4.0 - Production on Mon Jul 20 13:48:02 2015 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: IVLDB (not mounted) RMAN> restore controlfile from '/data/ivldb/lv0_20150718/level_0_ivldb_controfile_1118_1.ctl'; Starting restore at 2015-07-20 13:48:29 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=4348 device type=DISK channel ORA_DISK_1: restoring control file channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 output file name=/data/ivldb/uatdb/control02.ctl Finished restore at 2015-07-20 13:48:30
Mount命令的nolock模式通常是挂载到一个较旧版本的nfs服务器时使用,禁用nfs文件锁功能,挂载nfs默认是开启文件锁功能的,这就导致了上面的故障,下面是man手册中,关于挂载nfs的相关内容。
Mount options for nfs Instead of a textual option string, parsed by the kernel, the nfs file system expects a binary argument of type struct nfs_mount_data. The program mount itself parses the following options of the form 鈥榯ag=value鈥 and puts them in the structure mentioned: rsize=n, wsize=n, timeo=n, retrans=n, acregmin=n, acregmax=n, acdirmin=n, acdirmax=n, actimeo=n, retry=n, port=n, mountport=n, mounthost=name, mountprog=n, mountvers=n, nfsprog=n, nfsvers=n, namlen=n. The option addr=n is accepted but ignored. Also the following Boolean options, possibly preceded by no are recognized: bg, fg, soft, hard, intr, posix, cto, ac, tcp, udp, lock. For details, see nfs(5). Especially useful options include rsize=32768,wsize=32768 This causes the NFS client to try to negotiate a buffer size up to the size specified. A large buffer size does improve performance, but both the server and client have to support it. In the case where one of these does not support the size specified, the size negoti- ated will be the largest that both support. intr This will allow NFS operations (on hard mounts) to be interrupted while waiting for a response from the server. nolock Do not use locking. Do not start lockd.