• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

Oracle起动库时1102报错处理

发布: 2007-7-13 22:46 | 作者: 佚名    | 来源: 网络转载     | 查看: 10次 | 进入软件测试论坛讨论

领测软件测试网

一、提出问题

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

 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>

  

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网