ORA-01102:cannotmountdatabaseinEXCLUSIVEmode处理方法

报错现象:

报出 ORA-01102 错误,无法 mount

测试环境中数据库这台服务器不知因何原因异常关机了。重新开机之后尝试恢复相关应用发现启动数据库失败。期间翻山越岭走了段曲折小路。先把处理流程梳理一下以便后期遇到此类可以快速解决。

一、数据库

1.机器启动之后登录服务器使用sqlplus / as sysdba 登录数据库发现数据库并没有启动之前把数据库服务添加过开机自启动

2.使用startup命令启动数据库报错了

SYS@orcl>startup;

ORACLE 例程已经启动。

Total System Global Area 2471931904 bytes

Fixed Size    2255752 bytes

Variable Size  671089784 bytes

Database Buffers 1778384896 bytes

Redo Buffers   20201472 bytes

ORA-01102: cannot mount database in EXCLUSIVE mode

3.网络上搜索了一下 ORA-01102找到了解决方法

这个错误主要是lk<SID>文件造成的该文件位于ORALCE_HOME下的dbs目录下,

这个lk<SID>的主要作用是说明DATABASE MOUNT上了,不用在MOUNT了.DATABASE UNMOUNT 后会删除掉,如果DATABASE确实没有MOUNT,这个文件在你也MOUNT上,只有手工删除

4.谈到具体解决方法引入另外一个命令/sbin/fuser

/sbin/fuser的主要功能是使用文件或者套接字来表示识别进程。常把它用来查看相关进程和杀死相关进程。此处用来清除lk<SID>文件

/sbin/fuser -u /u01/app/oracle/product/11.2.0/db_1/dbs/lkHSDB 查询占用该临时文件的进程pid和username

/sbin/fuser -k /u01/app/oracle/product/11.2.0/db_1/dbs/lkHSDB 直接kill相关pid释放文件lk<SID>文件

/sbin/fuser -u /u01/app/oracle/product/11.2.0/db_1/dbs/lkHSDB 再次查看发现已经没有那些进程了

5.再次启动数据库一切ok

oracle 11g r2重启数据库实例报ORA-01081: cannot start already-running&nb

重启数据库实例报如下错误:

SQL> startup

ORA-01081: cannot start already-running ORACLE - shut it down first

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

Total System Global Area  634679296 bytes

Fixed Size          2216024 bytes

Variable Size       260050856 bytes

Database Buffers      364904448 bytes

Redo Buffers         7507968 bytes

Database mounted.

Database opened.

关闭数据库实例后,在重启数据库实例,正常重启了。

本文转载参考: