姓名:杨宝秋,OCM,ACE。近8年的TB级数据库设计、建设、管理、运行维护、调优经验,也做了7年的Hp和IBM Rs6000的系统管理员,而且是获得了BCFP认证的SAN管理员,现为中国联通黑龙江分公司数据库主管。

Oracle起动库时1102报错处理

上一篇 / 下一篇  2008-01-30 16:54:07 / 个人分类:Oracle

实际过程中有时我们会遇到这样的问题,当你用startup试图启动数据库时会遇到ORA-01102的报错,如何处理呢?

一、提出问题

实际过程中有时我们会遇到这样的问题,当你用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<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>


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


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

我的栏目

日历

« 2008-07-25  
  12345
6789101112
13141516171819
20212223242526
2728293031  

数据统计

  • 访问量: 5887
  • 日志数: 63
  • 图片数: 1
  • 建立时间: 2008-01-30
  • 更新时间: 2008-06-05

RSS订阅

Open Toolbar