ORA-01102: cannot mount database in EXCLUSIVE mode

   安装完数据库启动的时候报错ORA-01102: cannot mount database in EXCLUSIVE mode

 

这是个常见的错误。下面这个case讲述了如何fix.
 
一、提出问题
 
实际过程中有时我们会遇到这样的问题,当你用startup试图启动数据库时会遇到ORA-01102的报错。
 我们可以在Unix下切换到Oracle的用户,执行一下oerr ora 1102便会看到有关1102的简短的描述,
 如下:
 

$oerr ora 1102
 
01102, 00000, "cannot mount database in EXCLUSIVE mode"
 
// *Cause:  Some other instance has the database mounted exclusive or shared.
 
// *Action: Shutdown other instance or mount in a compatible mode
 

看了这个1102的简短的解释你一定有些迷惑,因为它有一些的误导性。如下我便来分析一下问题产生的原因,并给出解决的办法。
 


二、分析原因
 
当你启动数据库遇到1102报错时,之前的数据库的down操作一般都不是正常完成的,或由于一些异常使Oracle在操作系统中残留一些内存结构,Pmon等一几个进程依然存在等原因使Oracle误认
 为Instance依然在运行着,所以库就没有启动,具体说来大体原因有如下几个:
 
1、pmon、smon、lwgw及dbwr这些后台进程依然存在着
 
2、Oracle开辟的共享内存没有释放掉
 
3、"lk<sid>" and "sgadef<sid>.dbf"这两个用于锁内存的文件存在着。
 


三、解决问题
 
知道了原因,解决起来就简单多了,办法如下:
 
1、看一下"lk<sid>" and "sgadef<sid>.dbf"这两个文件是不是存在着,如果存在将其删掉。
 
oracle$cd $ORACLE_HOME/dbs
 
oracle$ls -l sgadef<sid>.dbf
 
如果存在删掉它
 oracle$rm sgadef<sid>.dbf
 
oracle$ls -l lk<sid>
 如果存在删掉它
 oracle$rm lk<sid>
 

2、看是不是有后台进程存在了
 
oracle$ps -ef | grep ora_ | grep $ORACLE_SID
 
如果有pmon这些后台进程的残留,kill -9掉它
 
oracle$kill -9 pid
 

3、看一下oracle的共享内存段及信号集(semaphores)是不是还存在着
 
1)清共享内存段
 
oracle$ipcs -m   --显示一下,看owner是Oracle用户的
 
oracle$ipcrm -m <Shared_Memory_ID>
 
2)清信号集
 
oracle$ipcs -s   --显示一下,看owner是Oracle用户的
 
oracle$ipcrm -s <Semaphore_ID>
 

 

ORA-01102 报错解决方法  
 
SQL> startup
 

ORACLE instance started.
 
Total System Global Area  599785472 bytes
 
Fixed Size                  2022600 bytes
 
Variable Size             171967288 bytes
 
Database Buffers          419430400 bytes
 
Redo Buffers                6365184 bytes
 
ORA-01102: cannot mount database in EXCLUSIVE mode
 
这个错误主要是lk<SID>文件造成的,该文件位于ORALCE_HOME下的dbs目录下,
 


这个lk<SID>的主要作用是说明DATABASE MOUNT上了,不用在MOUNT了.DATABASE UNMOUNT 后会删除掉,如果DATABASE确实没有MOUNT,这个文件在你也MOUNT上,只有手工删除,所以一定要小心.
 
具体解决ORA-01102问题的步骤:
 
# /sbin/fuser -u lkTEST
 
lkTEST: 4918(oracle) 20726(oracle) 20728(oracle) 20730(oracle) 20732(oracle) 20734(oracle) 20736(oracle) 20738(oracle) 20740(oracle) 20742(oracle) 20744(oracle) 20746(oracle) 20754(oracle) 21781(oracle) 21783(oracle)
 
该文件没释放,用fuser命令kill掉:
 
# /sbin/fuser -k lkTEST
 
lkTEST: 6666 6668 6670 6672 6674 6676 6678 6680 6690 6692 6694 6696 6737 6830
 
# /sbin/fuser -u lkTEST
 
然后:
 
SQL> startup
 
ORACLE instance started.
 
Total System Global Area  599785472 bytes
 
Fixed Size                  2022600 bytes
 
Variable Size             171967288 bytes
 
Database Buffers          419430400 bytes
 
Redo Buffers                6365184 bytes
 
Database mounted.
 
Database opened.
 
SQL>
 
数据库成功OPEN.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值