您的位置:首页 > 其它

ORA-01102: cannot mount database in EXCLUSIVE mode- DB关闭后进程未彻底停止

2010-07-01 12:24 746 查看
今天启动数据库 遇到ORA-01102: cannot mount database in EXCLUSIVE mode 问题

What's the problem

SQL> startup

ORACLE instance started.

Total System Global Area 6308233216 bytes

Fixed Size 2093288 bytes

Variable Size 1073745688 bytes

Database Buffers 5217714176 bytes

Redo Buffers 14680064 bytes

ORA-01102: cannot mount database in EXCLUSIVE mode

What's the root cause?

出现1102错误可能有以下几种可能:
一、在HA系统中,已经有其他节点启动了实例,将双机共享的资源(如磁盘阵列上的裸设备)占用了;

二、说明Oracle被异常关闭时,有资源没有被释放,一般有以下几种可能,
1、 Oracle的共享内存段或信号量没有被释放;
2、 Oracle的后台进程(如SMON、PMON、DBWn等)没有被关闭;
3、 用于锁内存的文件lk<sid>和sgadef<sid>.dbf文件没有被删除。

首先,虽然我们的系统是HA系统,但是备节点的实例始终处在关闭状态,这点通过在备节点上查数据库状态可以证实。
其次、是因系统掉电引起数据库宕机的,系统在接电后被重启,因此我们排除了第二种可能种的1、2点。最可疑的就是第3点了。
查$ORACLE_HOME/dbs目录:
$ cd $ORACLE_HOME/dbs
$ ls sgadef*
sgadef* not found
$ ls lk*

lkHPUSAGED lkHPUSAGEDB
[oracle@3823svr dbs]$ rm lkHPUSA*

果然,lk<sid>文件没有被删除。将它删除掉
$ rm lk*

再启动数据库,还是失败。

关闭数据库再查,发现SHUTDONW后进程还存在没彻底关闭

[oracle@3823svr dbs]$ export ORACLE_SID=hpusage
[oracle@3823svr dbs]$ ps -ef|grep hpusage
oracle 6899 1 0 Jun30 ? 00:00:00 ora_pmon_hpusage
oracle 6901 1 0 Jun30 ? 00:00:00 ora_psp0_hpusage
oracle 6903 1 0 Jun30 ? 00:00:00 ora_mman_hpusage
oracle 6905 1 0 Jun30 ? 00:00:02 ora_dbw0_hpusage
oracle 6907 1 0 Jun30 ? 00:00:00 ora_lgwr_hpusage
oracle 6909 1 0 Jun30 ? 00:00:02 ora_ckpt_hpusage
oracle 6911 1 0 Jun30 ? 00:00:02 ora_smon_hpusage
oracle 6913 1 0 Jun30 ? 00:00:00 ora_reco_hpusage
oracle 6915 1 0 Jun30 ? 00:00:01 ora_cjq0_hpusage
oracle 6917 1 0 Jun30 ? 00:00:00 ora_mmon_hpusage
oracle 6919 1 0 Jun30 ? 00:00:05 ora_mmnl_hpusage
oracle 6921 1 0 Jun30 ? 00:00:00 ora_d000_hpusage
oracle 6923 1 0 Jun30 ? 00:00:00 ora_s000_hpusage
oracle 6927 1 0 Jun30 ? 00:00:02 ora_arc0_hpusage
oracle 6929 1 0 Jun30 ? 00:00:01 ora_arc1_hpusage
oracle 6959 1 0 Jun30 ? 00:00:00 ora_qmnc_hpusage
oracle 6991 1 0 Jun30 ? 00:00:19 ora_j000_hpusage
oracle 7007 1 0 Jun30 ? 00:00:00 ora_q000_hpusage
oracle 7009 1 0 Jun30 ? 00:00:00 ora_q001_hpusage
oracle 17736 1 0 Jun30 ? 00:00:12 ora_j001_hpusage
oracle 18151 1 0 Jun30 ? 00:00:00 ora_j002_hpusage
oracle 18160 1 0 Jun30 ? 00:00:00 ora_j003_hpusage
oracle 18351 1 0 Jun30 ? 00:00:00 ora_j004_hpusage
oracle 18353 1 0 Jun30 ? 00:00:00 ora_j005_hpusage
oracle 18541 1 0 Jun30 ? 00:00:00 ora_j006_hpusage
oracle 18543 1 0 Jun30 ? 00:00:00 ora_j007_hpusage
oracle 18728 1 0 Jun30 ? 00:00:00 ora_j008_hpusage
oracle 18730 1 0 Jun30 ? 00:00:00 ora_j009_hpusage
oracle 21866 20872 0 04:17 pts/4 00:00:00 grep hpusage

What's the solution
Kill所有DB进程,重启数据库,成功

1. Kill 所有跟 hpusagedb相关的进程
[oracle@3823svr dbs]$ ps -ef|grep hpusage |awk '{print $2}'|xargs kill -9

2. 重启DB成功

SQL> startup
ORACLE instance started.

Total System Global Area 6308233216 bytes
Fixed Size 2093288 bytes
Variable Size 1073745688 bytes
Database Buffers 5217714176 bytes
Redo Buffers 14680064 bytes
Database mounted.
Database opene
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: