Oracle起动库时1102报错处理

时间:2007-12-23  来源:不详  作者:迈克DB

一、提出问题

实际过程中有时我们会碰到这样的问题,当你用startup试图启动数据库时会碰到ORA-01102的报错。我们可以在Unix下切换到Oracle的用户,执行一下oerr ora 1102便会看到有关1102的简短的描述,如下:

此文來自站长之家

rp2$[/home/ora2]oerr ora 1102

站长之.家adminI5.com

01102, 00000, "cannot mount database in EXCLUSIVE mode"

Admini5.com

// *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依然在运行着,所以库就没有启动,具体说来大体原因有如下几个:

站_长之家adminI5.com

1、pmon、smon、lwgw及dbwr这些后台进程依然存在着

站长_之家

2、Oracle开辟的共享内存没有释放掉 adminI5.com站长_之家

3、"lk<sid>" and "sgadef<sid>.dbf"这两个用于锁内存的文件存在着。

adminI5.com站长_之家

三、解决问题

站长之.家adminI5.com

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

站长.之家

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

oracle$cd $ORACLE_HOME/dbsoracle$ls -l sgadef<sid>.dbf假如存在删掉它oracle$rm sgadef<sid>.dbforacle$ls -l lk<sid>

站长.之家

假如存在删掉它oracle$rm lk<sid> 站长_之家

2、看是不是有后台进程存在了

此文來自站长之家

oracle$ps -ef | grep ora_ | grep $ORACLE_SID假如有pmon这些后台进程的残留,kill -9掉它oracle$kill -9 pid adminI5.com站.长.之.家

3、看一下oracle的共享内存段及信号集(semaphores)是不是还存在着

站.长.之.家

1)清共享内存段

adminI5.com站.长.之.家

oracle$ipcs -m --显示一下,看owner是Oracle用户的oracle$ipcrm -m <Shared_Memory_ID>

站长_之家

2)清信号集

此文来自站長之家

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

AdminI5.com站长之_家


看完这篇,您有何感觉呢?

文章评论

共有 0位Admini5网友发表了评论 查看完整内容