RAC ORA-01102

[grid@m1 ~]$ srvctl start database -d sreport

PRCR-1079 : Failed to start resource ora.sreport.db

CRS-5017: The resource action "ora.sreport.db start" encountered the following error: 

ORA-01102: cannot mount database in EXCLUSIVE mode

. For details refer to "(:CLSN00107:)" in "/u01/app/11.2.3/grid/log/m3/agent/crsd/oraagent_oracle/oraagent_oracle.log".

CRS-2674: Start of 'ora.sreport.db' on 'm3' failed

CRS-5017: The resource action "ora.sreport.db start" encountered the following error: 

ORA-01102: cannot mount database in EXCLUSIVE mode

. For details refer to "(:CLSN00107:)" in "/u01/app/11.2.3/grid/log/m2/agent/crsd/oraagent_oracle/oraagent_oracle.log".

CRS-2674: Start of 'ora.sreport.db' on 'm2' failed

CRS-2632: There are no more servers to try to place resource 'ora.sreport.db' on that would satisfy its placement policy

为什么会出现这情况就是因为没有改回来,

解决:

alter system set cluster_database=true scope=spfile sid=‘*’;

这是个常见的错误。下面这个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<sid>" and "sgadef<sid>.dbf"这两个用于锁内存的文件存在着。

 

三、解决问题

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

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

oracle$cd $ORACLE_HOME/dbs

oracle$ls -l sgadef<sid>.dbf

如果存在删掉它 
oracle$rm sgadef<sid>.dbf

oracle$ls -l lk<sid> 
如果存在删掉它 
oracle$rm lk<sid>

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 <Shared_Memory_ID>

2)清信号集

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

oracle$ipcrm -s <Semaphore_ID>

二、

 Oracle 11g RAC ORA-01102: cannot mount database in EXCLUSIVE mode 2013-03-08
14:47:23

分类: Linux

导入数据后,才发现中文全是乱码,原来是字符集忘记设置了,如是想自己动手修改RAC得字符集。按单机版得方式去修改,提示

ORA-12720: operation requires database is in EXCLUSIVE mode 

后来听说,在RAC环境要先执行如下命令

alter system set cluster_database=false scope=spfile sid='racdb2';

如是连接到结点2,执行完后,马上shutdown ,打算重启时,发现报错了。

SQL> startup

ORA-01102: cannot mount database in EXCLUSIVE mode

麻烦来了,网上看了一大圈,找不到适合自己的解决办法,后来只能求教高手了。

建议试试通过pfile把前面修改的参数修改回去。

SQL> create pfile from spfile;

create pfile from spfile

*

ERROR at line 1:

ORA-01565: error in identifying file '?/dbs/spfile@.ora'

ORA-27037: unable to obtain file status

Linux-x86_64 Error: 2: No such file or directory

Additional information: 3

可是pfile创建不了。

幸亏RAC的另一个结点1可以连接,如是通过结点1,把结点2的那个参数改回去。

alter system set cluster_database=true scope=spfile sid='racdb2';

再次去启动结点2的数据库,恢复正常。

SQL> startup

ORACLE instance started.

Total System Global Area 6747725824 bytes

Fixed Size                  2213976 bytes

Variable Size            3690989480 bytes

Database Buffers         3019898880 bytes

Redo Buffers               34623488 bytes

Database mounted.

Database opened.

SQL> 

真实虚惊一场。

上面的命令,可以不加sid参数。

某系统突然掉电,系统启动后发现Oracle无法启动。启动时报如下错误:

ORA-01102 cannot mount database in EXCLUSIVE mode

 

出现1102错误可能有以下几种可能:

一、在HA系统中,已经有其他节点启动了实例,将双机共享的资源(如磁盘阵列上的裸设备)占用了;

 

二、说明Oracle被异常关闭时,有资源没有被释放,一般有以下几种可能,

1、 Oracle的共享内存段或信号量没有被释放;

2、 Oracle的后台进程(如SMON、PMON、DBWn等)没有被关闭;

3、 用于锁内存的文件lk<sid>和sgadef<sid>.dbf文件没有被删除。

 

首先,虽然我们的系统是HA系统,但是备节点的实例始终处在关闭状态,这点通过在备节点上查数据库状态可以证实。

其次、是因系统掉电引起数据库宕机的,系统在接电后被重启,因此我们排除了第二种可能种的1、2点。最可疑的就是第3点了。

总结:

当发生1102错误时,可以按照以下流程检查、排错:

  • 如果是HA系统,检查其他节点是否已经启动实例;
  • 检查Oracle进程是否存在,如果存在则杀掉进程;
  • 检查信号量是否存在,如果存在,则清除信号量;
  • 检查共享内存段是否存在,如果存在,则清除共享内存段;
  • 检查锁内存文件lk<sid>和sgadef<sid>.dbf是否存在,如果存在,则删除。
时间: 2016-02-29

RAC ORA-01102的相关文章

RAC环境listener.ora和tnsnames.ora配置总结

RAC环境下面如果LISTENER.ORA和TNSNAMES.ORA没有配置好的话最常见的会出现 ora-12545 异常: 为了达到更好的使用目的,这里做一下总结: 首先,参考书 Oracle? Database Net Services Administrator's Guide Oracle? Database Net Services Reference 在6节 Local Naming Parameters (tnsnames.ora) 有一句话比较重要 Do not set the 

ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora)

        不论是单实例还是RAC,对于非缺省端口下(1521)的监听器,pmon进程不会将service/instance注册到监听器,即不会实现动态注册.与单实例相同,RAC非缺省端口的监听器也是通过设置参数local_listener来达到目的.除此之外,还可以对实例进行远程注册,以达到负载均衡的目的.这是通过一个参数remote_listener来实现.   有关Oracle 网络配置相关基础以及概念性的问题请参考:      配置ORACLE 客户端连接到数据库   配置非默认端口

ORACLE RAC 监听配置 (listener.ora tnsnames.ora)

    Oracle RAC 监听器的配置与单实例稍有不同,但原理和实现方法基本上是相同的.在Oracle中 tns进程用于为指定网络地址上的一个或多个Oracle 实例提供服务注册,并响应来自客户端对该服务提出的连接请求.一旦连接请求到达,并派生出一个服务器进程建立服务器与用户端之间的连接(专有服务器dedicated server)或转发服务请求(共享服务器模式shared server).如果监听器知道多于一个实例提供所请求的服务,则可能会根据客户端与服务器端相关配置将请求定位到较低负载的

【RAC】failed to online diskgroup resource ora.GI.dg

ALERT.LOG for ASM Shows "WARNING: failed to online diskgroup resource ora.GI.dg (unable to communicate with CRSD/OHASD)" [ID 1060920.1] 现象: If OCR is located on ASM diskgroup, following shows in ASM alert log ($ORACLE_BASE/diag/asm/+asm/+ASMn/tr

asm ora 01031-Linux Oracle RAC 11g

问题描述 Linux Oracle RAC 11g Failed to connect to ASM instance. ORA-01031: insufficient privileges (DBD ERROR: OCISessionBegin)

【RAC】在所有节点上滚动安装BUNDLE Patch for Base Bug 9413827补丁包

在升级rac  11.2.0.1到11.2.0.2 的时候会遇到一个bug 11201 TO 11202 ASM ROLLING UPGRADE – OLD CRS STACK FAILS TO STOP 本文以实例介绍如何安装次bug的补丁! 1 确定opatch 的版本 下载最新的optach版本和补丁程序 p6880880 可以参照 此文 Patch 9413827: 11201 TO 11202 ASM ROLLING UPGRADE – OLD CRS STACK FAILS TO S

【RAC】关闭Clusterware 遇到CRS-2529,ORA-15097:

需要关闭整个集群,遇到CRS-2529,ORA-15097 错误 ~! grid@rac1:/home/grid/Opatch>srvctl stop asm  -n rac1  -o immediate       PRCR-1014 : 无法停止资源 ora.asm PRCR-1065 : 无法停止资源 ora.asm CRS-2529: 无法对 'ora.asm' 执行操作, 因为这样做需要停止或重新定位 'ora.DATA1.dg', 但未指定强制选项 grid@rac1:/home/g

【RAC】upgrade GI from11.2.0.1 to 11.2.0.2

升级整个rac 环境则需要先升级Clusterware 层,然后升级Database/RDBMS,整个过程可以选择滚动升级也可以选择将数据库停掉,这个要根据生产库的停机维护窗口来定了.此文描述了非滚动升级的方式!实际过程中要更为严谨. 1 准备工作 下载补丁介质 通过登录My Oracle Support后进入Patch栏目搜索Patchid获得补丁.11.2.0.2补丁集的全称是11.2.0.2.0 PATCH SET FOR ORACLE DATABASE SERVER (Patchset)

【RAC】RAC 实现IP访问控制

   关于oracle实现ip 访问控制的资料见我的另一篇文章<sqlnet.ora 访问控制策略> 相对与单节点的oracle ,11gr2 rac中,listener是配置在GRID_HOME,而不是ORACLE_HOME,所以我们要修改的sqlnet.ora文件是在GI_HOME/network/admin目录下的而非ORACLE_HOME/network/admin 目录. 实验环境: 数据库版本 11.2.0.1.0 rac1 10.250.7.225 rac2 10.250.7.2