Chinaunix首页 | 论坛 | 博客
  • 博客访问: 11491153
  • 博文数量: 8065
  • 博客积分: 10002
  • 博客等级: 中将
  • 技术积分: 96708
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-16 17:06
文章分类

全部博文(8065)

文章存档

2008年(8065)

分类: 服务器与存储

2008-07-17 10:24:01

一、提出问题



实际过程中有时我们会遇到这样的问题,当你用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 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" and "sgadef.dbf"这两个用于锁内存的文件存在着。



三、解决问题



知道了原因,解决起来就简单多了,办法如下:



1、看一下"lk" and "sgadef.dbf"这两个文件是不是存在着,如果存在将其删掉。

oracle$cd $ORACLE_HOME/dbs



oracle$ls -l sgadef.dbf

如果存在删掉它

oracle$rm sgadef.dbf



oracle$ls -l lk

如果存在删掉它

oracle$rm lk



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



2)清信号集



oracle$ipcs -s  --显示一下,看owner是Oracle用户的

oracle$ipcrm -s



四、应该没问题了,再试一下吧^-^

            
阅读(228) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~