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.  
SQL> conn /as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area  591396864 bytes
Fixed Size                   1220724 bytes
Variable Size             167776140 bytes
Database Buffers         415236096  bytes
Redo Buffers                 7163904 bytes
ORA-01102: cannot mount database in EXCLUSIVE mode
SQL> shutdown immediate
ORA-01507: database not mounted

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]$   
[oracle@localhost dbs]$ ls sgadef*
ls: cannot access sgadef*: No such file or directory
[oracle@localhost dbs]$ ls lk*
lkORCL
[oracle@localhost dbs]$ 
lk<sid>文件没有被删除。将它删除掉
[oracle@localhost dbs]$ rm lkORCL  
[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. ……   
[root@localhost dbs]# ps -ef|grep oracle
root      2310  2358  0 16:00 pts/0    00:00:00 su - oracle
oracle    2311  2310  0 16:00 pts/0    00:00:00 -bash
root      2427  2403  0 10:47 pts/1    00:00:00 su - oracle
…… 

然后用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值