数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
Oracle起动库时1102报错处理

作者:未知 来源:月光软件站 加入时间:2005-2-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依然在运行着,所以库就没有启动,具体说来大体原因有如下几个:

 

1pmonsmonlwgwdbwr这些后台进程依然存在着

2Oracle开辟的共享内存没有释放掉

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   --显示一下,ownerOracle用户的

oracle$ipcrm -m <Shared_Memory_ID>

 

2)清信号集

 

oracle$ipcs -s   --显示一下,ownerOracle用户的

oracle$ipcrm -s <Semaphore_ID>

 

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

                      




相关文章

相关软件