ORA-01102: cannot mount database in EXCLUSIVE mode .

ORA-01102: cannot mount database in EXCLUSIVE mode

今天在redhat上安装完11g后,测试数据库是否安装成功。STARTUP数据库时,发生如下错误:
 
SQL> conn /as sysdba  
  1. Connected to an idle instance.  
  2. SQL> startup  
  3. ORACLE instance started.  
  4. Total System Global Area  591396864 bytes  
  5. Fixed Size                   1220724 bytes  
  6. Variable Size             167776140 bytes  
  7. Database Buffers         415236096  bytes  
  8. Redo Buffers                 7163904 bytes  
  9. ORA-01102: cannot mount database in EXCLUSIVE mode  
  10. SQL> shutdown immediate  
  11. ORA-01507: database not mounted  
  12.   
  13. ORACLE instance shut down.  


 
出现ORA-1102错误可能有以下几种可能:
一、在HA系统中,已经有其他节点启动了实例,将双机共享的资源(如磁盘阵列上的裸设备)占用了;
二、说明Oracle被异常关闭时,有资源没有被释放,一般有以下几种可能,
1、 Oracle的共享内存段或信号量没有被释放;
2、 Oracle的后台进程(如SMON、PMON、DBWn等)没有被关闭;
3、 用于锁内存的文件lk<sid>和sgadef<sid>.dbf文件没有被删除。
 
第一点,可以通过在备节点上查数据库状态来判断是否已启动实例。
第二点,如果系统是因为断电引起数据库宕机的,并且系统在接电被重启后,我们可以排除第二种可能的1、2点。接下来考虑第3点。
查$ORACLE_HOME/dbs目录:
 
     [oracle@localhost dbs]$ ls sgadef*  
  1. ls: cannot access sgadef*: No such file or directory  
  2. [oracle@localhost dbs]$ ls lk*  
  3. lkORCL  
  4. [oracle@localhost dbs]$   
lk<sid>文件没有被删除。将它删除掉
[oracle@localhost dbs]$ rm lkORCL  
再启动数据库,成功。

如果是Oracle进程没有关闭,用以下命令查出存在的oracle进程:
 
[root@localhost dbs]# ps -ef|grep oracle  
  1. root      2310  2358  0 16:00 pts/0    00:00:00 su - oracle  
  2. oracle    2311  2310  0 16:00 pts/0    00:00:00 -bash  
  3. root      2427  2403  0 10:47 pts/1    00:00:00 su - oracle  
  4. ……   

然后用kill -9命令杀掉进程
$kill -9 <PID>
 
总结:
当发生1102错误时,可以按照以下流程检查、排错:

1.如果是HA系统,检查其他节点是否已经启动实例;

2.检查Oracle进程是否存在,如果存在则杀掉进程;

3.检查信号量是否存在,如果存在,则清除信号量;

4.检查共享内存段是否存在,如果存在,则清除共享内存段;

5.检查锁内存文件lk<sid>和sgadef<sid>.dbf是否存在,如果存在,则删除。

 

我的解决办法:

使用sqlplus sys/sys123@orcl as sysdba登录

或者是登录sqlplus前先设置实例名

[oracle@hxy ~]$ set ORACLE_SID=orcl

你可能感兴趣的:(ORA-01102: cannot mount database in EXCLUSIVE mode .)