Oracle起动库时1102报错处理

** 一、提出问题 **

实际过程中有时我们会遇到这样的问题,当你用 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<sid>" and "sgadef<sid>.dbf"  这两个用于锁内存的文件存在着。 
 2
 3** 三、解决问题  **
 4
 5知道了原因,解决起来就简单多了,办法如下: 
 6
 71  、看一下  "lk<sid>" and "sgadef<sid>.dbf"  这两个文件是不是存在着,如果存在将其删掉。 
 8
 9oracle$cd $ORACLE_HOME/dbs 
10
11oracle$ls -l sgadef<sid>.dbf 
12
13如果存在删掉它 
14
15oracle$rm sgadef<sid>.dbf 
16
17oracle$ls -l lk<sid>
18
19如果存在删掉它 
20
21oracle$rm lk<sid>
22
232  、看是不是有后台进程存在了 
24
25oracle$ps -ef | grep ora_ | grep $ORACLE_SID 
26
27如果有  pmon  这些后台进程的残留,  kill -9  掉它 
28
29oracle$kill -9 pid 
30
313  、看一下  oracle  的共享内存段及信号集  (semaphores)  是不是还存在着 
32
331)  清共享内存段 
34
35oracle$ipcs -m  \--  显示一下  ,  看  owner  是  Oracle  用户的 
36
37oracle$ipcrm -m <shared_memory_id>
38
392)  清信号集 
40
41oracle$ipcs -s  \--  显示一下  ,  看  owner  是  Oracle  用户的 
42
43oracle$ipcrm -s <semaphore_id>
44
45** 四、应该没问题了,再试一下吧  ^-^  **</semaphore_id></shared_memory_id></sid></sid></sid></sid></sid></sid></sid></sid>
Published At
Categories with 数据库类
Tagged with
comments powered by Disqus