oracle报错ora-01031_mysql数据库

数据库 (1) 2024-08-28 12:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
oracle报错ora-01031_mysql数据库,希望能够帮助你!!!。

概述

今天一台测试数据库出现故障,无法正常启动。

报错显示:ORA-01102: cannot mount database in EXCLUSIVE mode,截图如下:

oracle报错ora-01031_mysql数据库_https://bianchenghao6.com/blog_数据库_第1张


思路:

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

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

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

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

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

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

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

Metalink上面的解决方法如下:

oracle报错ora-01031_mysql数据库_https://bianchenghao6.com/blog_数据库_第2张


解决过程:

1、查$ORACLE_HOME/dbs目录:

$ cd $ORACLE_HOME/dbs $ ls sgadef* sgadef* not found $ ls lk* /opt/oracle/product/ 10.2.0/db_1/dbs/lkSIMPLY lkSIMPLY 

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

$ rm lk* 
oracle报错ora-01031_mysql数据库_https://bianchenghao6.com/blog_数据库_第3张

2、查看共享内存段

[oracle@WMDB:/u01/app/oracle/product/11.2.0/db_1/dbs]$ipcs -map ------ Message Queues PIDs -------- msqid owner lspid lrpid ------ Shared Memory Creator/Last-op PIDs -------- shmid owner cpid lpid  oracle 24398 25244  oracle 24398 25244  oracle 24398 25244  oracle 24398 25244 

3、根据ID号清除共享内存段

[oracle@WMDB:/u01/app/oracle/product/11.2.0/db_1/dbs]$ipcrm -m  [oracle@WMDB:/u01/app/oracle/product/11.2.0/db_1/dbs]$ipcrm -m  [oracle@WMDB:/u01/app/oracle/product/11.2.0/db_1/dbs]$ipcrm -m  [oracle@WMDB:/u01/app/oracle/product/11.2.0/db_1/dbs]$ipcrm -m  [oracle@WMDB:/u01/app/oracle/product/11.2.0/db_1/dbs]$ipcs -map ------ Message Queues PIDs -------- msqid owner lspid lrpid ------ Shared Memory Creator/Last-op PIDs -------- shmid owner cpid lpid 
oracle报错ora-01031_mysql数据库_https://bianchenghao6.com/blog_数据库_第4张

4、查看信号量

# ipcs -s 

5、清除oracle的信号量

# ipcrm -s  
oracle报错ora-01031_mysql数据库_https://bianchenghao6.com/blog_数据库_第5张

再查询共享内存段也没问题

# ipcs -m 
oracle报错ora-01031_mysql数据库_https://bianchenghao6.com/blog_数据库_第6张

这里如果是Oracle进程没有关闭,则执行以下命令

$kill -9 <PID> 

执行后可以正常启动数据库,问题解决。


这里主要对数据库的故障做个简单记录,大家以后碰到类似问题按这个流程处理就可以了。后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

oracle报错ora-01031_mysql数据库_https://bianchenghao6.com/blog_数据库_第7张

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

发表回复