分类: Oracle
2008-05-24 15:53:28
来源: |
|
一、提出问题 实际过程中有时我们会遇到这样的问题,当你用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 三、解决问题 知道了原因,解决起来就简单多了,办法如下: 1、看一下"lk oracle$cd $ORACLE_HOME/dbs oracle$ls -l sgadef 如果存在删掉它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 |