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