描述:
因为服务器断电重启导致了数据库实例启动报错。提示报错信息如下,从错误信息很多人就联想到估计是服务器有进程残留或者共享内存没释放,原因确实是这样吗,下面我们进行分析。
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
分析过程:
分析后台进程
可以看到是没有Oracle相关后台进程的
[oracle@aix173 /home/oracle]$ps -ef | grep ora
oracle 5242928 11010228 0 Aug 16 pts/0 0:00 -ksh
oracle 7274638 17105128 1 14:46:36 pts/1 0:00 bash
oracle 7405654 5242928 0 Aug 16 pts/0 0:00 bash
oracle 12386438 15270068 0 Aug 16 pts/0 0:00 bash
oracle 13893632 1 0 Aug 10 - 0:21 /oracle/app/oracle/product/11.2.0.4/dbhome_1/bin/tnslsnr LISTENER -inherit
oracle 15270068 16515274 0 Aug 16 pts/0 0:00 -ksh
oracle 16187628 7274638 0 15:26:27 pts/1 0:00 ps -ef
oracle 17105128 15466672 0 14:46:36 pts/1 0:00 -ksh
[oracle@aix173 /home/oracle]$
分析共享内存
也可以看到,没有跟oracle用户相关的内存信息
[oracle@aix173 /home/oracle]$ipcs -a
IPC status from /dev/mem as of Thu Aug 19 15:27:19 CDT 2021
T ID KEY MODE OWNER GROUP CREATOR CGROUP CBYTES QNUM QBYTES LSPID LRPID STIME RTIME CTIME
Message Queues:
q 0 0x4107001c -Rrw-rw---- root printq root printq 0 0 4194304 0 0 no-entry no-entry 10:25:22
T ID KEY MODE OWNER GROUP CREATOR CGROUP NATTCH SEGSZ CPID LPID ATIME DTIME CTIME
Shared Memory:
m 0 0xffffffff D-rw------- pconsole system pconsole system 1 536870912 4653224 4653224 10:35:27 no-entry 10:35:27
m 1048577 0x6100a037 --rw------- pconsole system pconsole system 1 10485760 4653224 4653224 10:35:28 no-entry 10:35:28
T ID KEY MODE OWNER GROUP CREATOR CGROUP NSEMS OTIME CTIME
Semaphores:
s 3145728 0x0102b017 --ra-ra-r-- root system root system 1 10:25:20 10:25:20
s 1 0x620002eb --ra-r--r-- root system root system 1 10:25:13 10:25:13
s 2 0x4e0002af --ra-ra---- root printq root printq 1 10:25:22 10:25:22
s 3 0x150002af --ra-ra---- root printq root printq 1 10:25:22 10:25:22
s 4 0x020007bc --ra-ra-ra- root system root system 2 10:35:24 10:35:24
s 5 0x010007bc --ra-ra-ra- root system root system 2 10:35:25 10:35:25
s 16 0x8100a034 --ra------- pconsole system pconsole system 4 23:27:44 10:35:28
s 17 0xa1001002 --ra-ra-ra- root system root system 2 no-entry 10:35:30
s 18 0x0100021b --ra------- root system root system 1 11:18:21 11:18:21
[oracle@aix173 /home/oracle]$
关键点
到这里我们就要想到Oracle启动的原理,在Oracle启动/停止进程发起的时候,会在$ORACLE_HOME/dbs目录下生成一个lkinst’SID’的临时文件进行lock,在启动/停止完成的时候会unlock然后把此文件删掉。
分析lkinst’SID’文件
从图中我们就可以看到了此实例链接文件,而这就是原因所在,服务器在异常关闭的时候数据库在关闭进程还没来得及关闭实例完成,此时服务器已经关闭了,导致此文件没有被删除,当下次启动的时候就会无法锁定实例,因而提示上方的错误。
故障处理:
删除或者移走lkinstfordb文件即可
[oracle@aix173 /oracle/app/oracle/product/11.2.0.4/dbhome_1/dbs]$rm -f lkinstfordb
再次启动数据库,发现已经正常启动
SQL> startup
ORACLE instance started.
Total System Global Area 1720328192 bytes
Fixed Size 2247072 bytes
Variable Size 1056966240 bytes
Database Buffers 654311424 bytes
Redo Buffers 6803456 bytes
Database mounted.
Database opened.
SQL>
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。