Some Context
Oracle database was hosted on ZFS Storage Appliance (NAS). The database files are accessible from the database server node via NFS mounted filesystems. Solaris 10 is the operating system on DB node.
Someone forgets to shutdown the database instance and unmount the remote filesystems before rebooting the database server node. After the system boots up, Oracle RDBMS fails to bring up the database due to locked-out data files.
eg.,
SQL> startup
ORACLE instance started.
Total System Global Area 1.7108E+10 bytes
Fixed Size 2165208 bytes
Variable Size 9965671976 bytes
Database Buffers 6845104128 bytes
Redo Buffers 295329792 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/orclvol4/entDB/system01.dbf'
======================
Extract from alert log:
======================
...
ALTER DATABASE OPEN
Fri Aug 05 21:30:54 2011
Errors in file /oracle112/diag/rdbms/entdb/entDB/trace/entDB_dbw0_7235.trc:
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/orclvol4/entDB/system01.dbf'
ORA-27086: unable to lock file - already in use
SVR4 Error: 11: Resource temporarily unavailable
Additional information: 8
Additional information: 21364
Errors in file /oracle112/diag/rdbms/entdb/entDB/trace/entDB_dbw0_7235.trc:
ORA-01157: cannot identify/lock data file 2 - see DBWR trace file
ORA-01110: data file 2: '/orclvol4/entDB/sysaux01.dbf'
ORA-27086: unable to lock file - already in use
SVR4 Error: 11: Resource temporarily unavailable
Additional information: 8
Additional information: 21364
...
Reason for the lock failure:
Because of the sudden ungraceful shutdown of the database, file locks on data files were not released by the NFS server (ZFS SA in this case). NFS server held on to the file locks even after the NFS client (DB server node in this example) was restarted. Due to this, Oracle RDBMS is not able to lock those data files residing on NFS server (ZFS SA). As a result, database instance was failed to start up in exclusive mode.
Workaround
Manually clear the NFS locks as outlined below.
On NFS Client (database server node):
- Shutdown the mounted database
- Unmount remote (NFS) filesystems
-
Execute:
clear_locks -s <nfs_server_host>
eg.,
# clear_locks -s sup16
Clearing locks held for NFS client ipsedb1 on server sup16
clear of locks held for ipsedb1 on sup16 returned success
On NFS Server (ZFS SA):
(this step may not be necessary but wouldn't hurt to perform)
- Execute:
clear_locks <nfs_client_host>
eg.,
sup16# clear_locks 10.129.207.93
Clearing locks held for NFS client 10.129.207.93 on server sup16
clear of locks held for 10.129.207.93 on sup16 returned success
Again back on NFS Client (database server node):
- Restart NFS client
(this step may not be necessary but wouldn't hurt to perform)
# svcadm -v disable nfs/client
# svcadm -v enable nfs/client - Mount remote/NFS filesystems
- Finally start the database
Also see:
Listing file locks on Solaris 10