ORA-09968, ORA-01102, ORA-10997 When Starting a Database
Applies to:
Oracle Database - Enterprise Edition - Version 8.1.7.4 to 11.2.0.3 [Release 8.1.7 to 11.2]
Information in this document applies to any platform.
***Checked for relevance on 18-Nov-2011***
Symptoms
Trying to startup a database on an UNIX server -having more than one database-, fails with the below errors:
sculkget: failed to lock /usr/local/oracle/product/10.2.0/dbs/lkISODDEV exclusive
sculkget: lock held by PID: xxxx
ORA-09968: unable to lock file
SVR4 Error: 11: Resource temporarily unavailable
Additional information: xxxx
ORA-1102 signalled during: ALTER DATABASE MOUNT...
OR
SQL> startup
ORA-10997: another startup/shutdown operation of this instance inprogress
ORA-09968: unable to lock file
Linux-x86_64 Error: 11: Resource temporarily unavailable
Changes
Cause
The strace for the startup process shows that the lock issue is on file $ORACLE_HOME/dbs/lkinst<instance_name> as below:
%strace -f -o strace_output.txt "sqlplus / as sysdba"
16456 open("/oracle/product/11.2.0/db_1/dbs/lkinstbantst1", O_RDWR|O_CREAT|O_EXCL, 0660) = -1 EEXIST (File exists)
16456 open("/oracle/product/11.2.0/db_1/dbs/lkinstbantst1", O_RDWR) = 8
16456 fcntl(8, F_SETFD, FD_CLOEXEC) = 0
16456 fcntl(8, F_SETLK, {type=F_WRLCK, whence=SEEK_SET, start=0, len=0}) = -1 EAGAIN (Resource temporarily unavailable)
For example:
The parameter files for two databases have the same entries for control_files and db_name like
...
*.control_files='xx/control01.ctl','xx/control02.ctl','xx/control03.ctl'
*.db_name=ISODDEV
...
When the database is started using any of the pfiles the database being started is INST1 which locks the file INST2.
Solution
Delete or rename the file $ORACLE_HOME/dbs/lkinst<instance_name>
A new file will be created when the instance is started up again.
OR
Change the parameter file to have the correct entries for the control_files and db_name belonging to the individual databases.
The above document taken from Oracle Doc ID 467251.1