解决ORA-01102: cannot mount database in EXCLUSIVE mode问题

今天在STARTUP一数据库时,发生如下错误:
 
SQL> conn /as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 276824064 bytes
Fixed Size                   778736 bytes
Variable Size             137371152 bytes
Database Buffers          138412032 bytes
Redo Buffers                 262144 bytes
ORA-01102: cannot mount database in EXCLUSIVE mode
SQL> shutdown immediate
ORA-01507: database not mounted
ORACLE instance shut down.
网上找了一下,发现日志:http://nitar.blog.163.com/blog/static/28638792009116355706/,处理方法如下(通过下面的方面,问题成功解决):
 
发现是lk<SID>文件造成的,该文件位于ORALCE_HOME下的dbs目录下,马上检查该文件:
 
[root@qa-oracle dbs]# fuser -u lkNDMSQA
lkNDMSQA:             6666(oracle) 6668(oracle) 6670(oracle) 6672(oracle) 6674(oracle) 6676(oracle) 6678(oracle) 6680(oracle) 6690(oracle) 6692(oracle) 6694(oracle) 6696(oracle) 6737(oracle) 6830(oracle)
 
果然该文件没释放,用fuser命令kill掉:
[root@qa-oracle dbs]# fuser -k lkNDMSQA
lkNDMSQA:             6666 6668 6670 6672 6674 6676 6678 6680 6690 6692 6694 6696 6737 6830
[root@qa-oracle dbs]# fuser -u lkNDMSQA
 
然后:
 
SQL> startup
ORACLE instance started.
Total System Global Area 276824064 bytes
Fixed Size                   778736 bytes
Variable Size             137371152 bytes
Database Buffers          138412032 bytes
Redo Buffers                 262144 bytes
Database mounted.
Database opened.
SQL>
 
数据库成功OPEN.
 
 
数据库异常关闭后无法启动问题处理一例
 
 
某系统突然掉电,系统启动后发现Oracle无法启动。启动时报如下错误:
ORA-01102 cannot mount database in EXCLUSIVE mode
出现1102错误可能有以下几种可能:
一、在HA系统中,已经有其他节点启动了实例,将双机共享的资源(如磁盘阵列上的裸设备)占用了;
 
二、说明Oracle被异常关闭时,有资源没有被释放,一般有以下几种可能,
1、 Oracle的共享内存段或信号量没有被释放;
2、 Oracle的后台进程(如SMON、PMON、DBWn等)没有被关闭;
3、 用于锁内存的文件lk<sid>和sgadef<sid>.dbf文件没有被删除。
 
首先,虽然我们的系统是HA系统,但是备节点的实例始终处在关闭状态,这点通过在备节点上查数据库状态可以证实。
其次、是因系统掉电引起数据库宕机的,系统在接电后被重启,因此我们排除了第二种可能种的1、2点。最可疑的就是第3点了。
查$ORACLE_HOME/dbs目录:
$ cd $ORACLE_HOME/dbs
$ ls sgadef*
sgadef* not found
$ ls lk*
lkORA92
果然,lk<sid>文件没有被删除。将它删除掉
$ rm lk*
再启动数据库,成功。
 
如果怀疑是共享内存没有被释放,可以用以下命令查看:
$ipcs -mop
IPC status from /dev/kmem as of Thu Jul 6 14:41:43 2006
T      ID     KEY        MODE        OWNER     GROUP NATTCH CPID LPID
Shared Memory:
m       0 0x411c29d6 --rw-rw-rw-      root      root      0   899   899
m       1 0x4e0c0002 --rw-rw-rw-      root      root      2   899   901
m       2 0x4120007a --rw-rw-rw-      root      root      2   899   901
m 458755 0x0c6629c9 --rw-r-----      root       sys      2 9113 17065
m       4 0x06347849 --rw-rw-rw-      root      root      1 1661 9150
m   65541 0xffffffff --rw-r--r--      root      root      0 1659 1659
m 524294 0x5e100011 --rw-------      root      root      1 1811 1811
m 851975 0x5fe48aa4 --rw-r-----    oracle oinstall     66 2017 25076
然后它ID号清除共享内存段:
$ipcrm –m 851975
对于信号量,可以用以下命令查看:
$ ipcs -sop
IPC status from /dev/kmem as of Thu Jul 6 14:44:16 2006
T      ID     KEY        MODE        OWNER     GROUP
Semaphores:
s       0 0x4f1c0139 --ra-------      root      root
... ...
s      14 0x6c200ad8 --ra-ra-ra-      root      root
s      15 0x6d200ad8 --ra-ra-ra-      root      root
s      16 0x6f200ad8 --ra-ra-ra-      root      root
s      17 0xffffffff --ra-r--r--      root      root
s      18 0x410c05c7 --ra-ra-ra-      root      root
s      19 0x00446f6e --ra-r--r--      root      root
s      20 0x00446f6d --ra-r--r--      root      root
s      21 0x00000001 --ra-ra-ra-      root      root
s   45078 0x67e72b58 --ra-r-----    oracle oinstall
根据信号量ID,用以下命令清除信号量:
$ipcrm -s 45078
如果是Oracle进程没有关闭,用以下命令查出存在的oracle进程:
$ ps -ef|grep ora
oracle 29976     1 0 Jun 22 ?         0:52 ora_dbw0_ora92
oracle 29978     1 0 Jun 22 ?         0:51 ora_dbw1_ora92
oracle 5128     1 0 Jul 5 ?         0:00 oracleora92 (LOCAL=NO)
... ...
然后用kill -9命令杀掉进程
$kill -9 <PID>
总结:
当发生1102错误时,可以按照以下流程检查、排错:
1.如果是HA系统,检查其他节点是否已经启动实例;
2.检查Oracle进程是否存在,如果存在则杀掉进程;
3.检查信号量是否存在,如果存在,则清除信号量;
4.检查共享内存段是否存在,如果存在,则清除共享内存段;
5.检查锁内存文件lk<sid>和sgadef<sid>.dbf是否存在,如果存在,则删除。

时间: 2024-10-02 12:44:02

解决ORA-01102: cannot mount database in EXCLUSIVE mode问题的相关文章

ORA-01102: cannot mount database in EXCLUSIVE mode

安装完ORACEL 10g数据库后,启动数据库时遇到ORA-01102: cannot mount database in EXCLUSIVE mode 查看告警日志文件,发现有ORA-09968: unable to lock file 和Linux-x86_64 Error: 11: Resource temporarily unavailable等错误 [oracle@DB-Server bdump]$ tail -20f alert_epps.log   SMON started wit

解决sqlite死锁示例异常database is locked

/* * sqlite的连接方式实际上为单连接方式,即使实用多线程也是用的一个连接 * getWritableDatabase()和getReadableDatabase()都为synchronized方法,但不是static方法 * 所以都只对同一个对象起同步作用,对于不同的对象没有任何作用 * 所以使用sqlite的时候可以提供一个单一的入口,防止多对象修改数据库而造成死锁 * 所以可以提供一个static的instance对象+它的get方法, * 连接可一直挂着,即使多次调用getWri

解决oracle数据库ORA-65101 container database set up incorrectly

老朋友找我帮忙,说他们从笔记本中拷贝数据库到客户服务器上,无法启动,让我帮忙看下 启动报ORA-00211 ORA-00202错误 C:\Users\Administrator>sqlplus / as  sysdba   SQL*Plus: Release 12.1.0.1.0 Production on 星期二 10月 13 21:35:45 2015   Copyright (c) 1982, 2013, Oracle.  All rights reserved.     连接到: Ora

解决Access出现Microsoft JET Database Engine (0x80004005)未指定的错误_Access

Microsoft JET Database Engine (0x80004005)未指定的错误,这个错误只有在使用Access数据库时才能出现   出现以上问题,可以使用以下步骤进行解决问题:   1.系统可能没有注册msjetoledb40.dll,解决办法是    点 开始--->运行, 输入 regsvr32 msjetoledb40.dll, 回车即可: 2.数据库所在文件夹权限    打开办法是:打开我的电脑,然后点菜单上的"文件夹选项"--->查看,然后把&q

用shell帮助解决ORA问题

今天碰到一个设计的严重问题,由于使用了外部文件来和sqlplus交互 sql大体结构如下 select xxxxx from xxxxx where table_name in ( "解析外部文件") 在测试环境中没有什么问题,当某个用户表比较多的时候,就开始报如下的错误 * ERROR at line 1003: ORA-01795: maximum number of expressions in a list is 1000 ***************************

exchange 2007数据库无法恢复 Failed to mount database &amp;amp;#x27;Mailbox Database&amp;amp;#x27; (着急,在线等)

问题描述 exchange2007服务器因为磁盘阵列问题导致系统崩溃,数据从磁盘阵列读出来以后,执行装载操作报-1018错误.根据网上搜索,我们执行了eseutil/p操作,由于邮件数据size很大,一直修复过程中.期间当我们要登陆主机再次确认是否修复完成时,无法登陆主机了!非常着急,只能通过网络映射数据文件所在目录检查文件情况,发现文件时间一直没有更新了(执行修复时,文件会随时进行更新),据此我们判断已经修复完成,但由于一直无法登陆主机,所以只能重启.重启后尝试再次进行数据库装载,失败,此时操

解决ORA-01078: failure in processing system parameters问题

数据库在安装完成后,在启动时,报错误:ORA-01078: failure in processing system parameters [oracle@localhost ~]$ sqlplus /nolog SQL*Plus: Release 10.2.0.4.0 - Production on Fri Dec 2 15:56:00 2011 Copyright (c) 1982, 2007, Oracle.  All Rights Reserved. SQL> conn /as sysd

ORA-01102 的解决办法

安装完oracle 数据库后启时,遇到ora-01102错误. oracle@r05a11016.yh.com:/home/oracle>sqlplus "/as sysdba" SQL*Plus: Release 11.2.0.2.0 Production on Fri Apr 15 16:17:39 2011 Copyright (c) 1982, 2010, Oracle.  All rights reserved. Connected to an idle instanc

Oracle起动库时1102报错处理

oracle 一.提出问题   实际过程中有时我们会遇到这样的问题,当你用startup试图启动数据库时会遇到ORA-01102的报错.我们可以在Unix下切换到Oracle的用户,执行一下oerr ora 1102便会看到有关1102的简短的描述,如下:   rp2$[/home/ora2]oerr ora 1102 01102, 00000, "cannot mount database in EXCLUSIVE mode" // *Cause:  Some other insta