oracle查询监听sp20734,ORA-01102: cannot mount database in EXCLUSIVE mode

安装完数据库启动的时候报错ORA-01102: cannot mount database in EXCLUSIVE mode

这是个常见的错误。下面这个case讲述了如何fix.

一、提出问题

实际过程中有时我们会遇到这样的问题,当你用startup试图启动数据库时会遇到ORA-01102的报错。

我们可以在Unix下切换到Oracle的用户,执行一下oerr ora 1102便会看到有关1102的简短的描述,

如下:

$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" and "sgadef.dbf"这两个用于锁内存的文件存在着。

三、解决问题

知道了原因,解决起来就简单多了,办法如下:

1、看一下"lk" and "sgadef.dbf"这两个文件是不是存在着,如果存在将其删掉。

oracle$cd $ORACLE_HOME/dbs

oracle$ls -l sgadef.dbf

如果存在删掉它

oracle$rm sgadef.dbf

oracle$ls -l lk

如果存在删掉它

oracle$rm lk

2、看是不是有后台进程存在了

oracle$ps -ef | grep ora_ | grep $ORACLE_SID

如果有pmon这些后台进程的残留,kill -9掉它

oracle$kill -9 pid

3、看一下oracle的共享内存段及信号集(semaphores)是不是还存在着

1)清共享内存段

oracle$ipcs -m --显示一下,看owner是Oracle用户的

oracle$ipcrm -m

2)清信号集

oracle$ipcs -s --显示一下,看owner是Oracle用户的

oracle$ipcrm -s

ORA-01102 报错解决方法

SQL> startup

ORACLE instance started.

Total System Global Area 599785472 bytes

Fixed Size 2022600 bytes

Variable Size 171967288 bytes

Database Buffers 419430400 bytes

Redo Buffers 6365184 bytes

ORA-01102: cannot mount database in EXCLUSIVE mode

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

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

具体解决ORA-01102问题的步骤:

# /sbin/fuser -u lkTEST

lkTEST: 4918(oracle) 20726(oracle) 20728(oracle) 20730(oracle) 20732(oracle) 20734(oracle) 20736(oracle) 20738(oracle) 20740(oracle) 20742(oracle) 20744(oracle) 20746(oracle) 20754(oracle) 21781(oracle) 21783(oracle)

该文件没释放,用fuser命令kill掉:

# /sbin/fuser -k lkTEST

lkTEST: 6666 6668 6670 6672 6674 6676 6678 6680 6690 6692 6694 6696 6737 6830

# /sbin/fuser -u lkTEST

然后:

SQL> startup

ORACLE instance started.

Total System Global Area 599785472 bytes

Fixed Size 2022600 bytes

Variable Size 171967288 bytes

Database Buffers 419430400 bytes

Redo Buffers 6365184 bytes

Database mounted.

Database opened.

SQL>

数据库成功OPEN.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值