(ORA-01102、ORA-32004)-Oracle关闭时没有完全释放资源
现象描述
启动Oracle失败,系统显示如下错误信息:
SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified ORACLE instance started. Total System Global Area 2137886720 bytes Fixed Size 2122920 bytes Variable Size 1191185240 bytes Database Buffers 939524096 bytes Redo Buffers 5054464 bytes ORA-01102: cannot mount database in EXCLUSIVE mode复制
可能原因
异常关闭Oracle时,存在以下几种没有释放资源的可能原因:
- Oracle的后台进程(如SMON、PMON、LWGW、DBWn等)没有关闭。
- 用于锁内存的文件“lk<sid>”和“sgadef<sid>.dbf”没有删除。
- Oracle的共享内存段或信号量没有释放。
定位思路
- 如果是HA系统,检查其他节点是否已经启动实例。
- 检查Oracle进程是否存在,如果存在则删除进程。
- 检查锁内存文件“lk<sid>”和“sgadef<sid>.dbf”是否存在,如果存在,则删除锁内存文件。
- 检查共享内存段是否存在,如果存在,则清除共享内存段。
- 检查信号量是否存在,如果存在,则清除信号量。
处理步骤
- 以oracle用户登录数据库所在机器。
- 检查数据库在备节点上的状态。
确定备节点的实例处于关闭状态。
- 检查Oracle进程是否启动。
% ps -ef | grep pmon
如果进程启动,则关闭。
% kill -9 Oracle进程ID
- 以sysdba用户连接数据库。
% sqlplus / as sysdba
- 以abort模式退出数据库。
SQL> shutdown abort;
- 重新启动数据库。
SQL> startup
- 如果数据库启动成功,则结束操作。
- 如果数据库启动失败,则执行7。
- 退出SQLPLUS。
SQL> quit
- 检查锁内存文件“lk<sid>”和“sgadef<sid>.dbf”是否被删除。
- 进入“$ORACLE_HOME/dbs”目录。
% cd $ORACLE_HOME/dbs
- 检查“sgadef<sid>.dbf”是否存在。
% ls sgadef*
- 如果“sgadef<sid>.dbf”文件不存在,系统提示如下信息:
sgadef* not found
复制 如果“sgadef<sid>.dbf”文件存在,则删除此文件。
% rm sgadef*
- 如果“sgadef<sid>.dbf”文件不存在,系统提示如下信息:
- 检查“lk<sid> ”是否存在。
% ls lk*
- 如果“lk<sid> ”不存在,系统提示如下信息:
lk* not found
复制 如果“lk<sid> ”文件存在,则删除此文件。
% rm lk*
- 如果“lk<sid> ”不存在,系统提示如下信息:
- 重新启动数据库。SQL> startup mount;
- 进入“$ORACLE_HOME/dbs”目录。
- 以root用户登录数据库所在机器。
- 栓查共享内存段是否存在。如果存在,则删除。
- 查看共享内存段。
# ipcs -map
系统显示如下信息时,表示Oracle共享内存段存在。------ Shared Memory Creator/Last-op -------- shmid owner cpid lpid 786444 root 6490 6438 819213 root 6549 6438 1409040 oracle 31502 16728
复制 - 根据ID号清除共享内存段。
# ipcrm –m 1409040
说明:
1409040是共享内存段ID,以系统实际查询值为准。
- 查看共享内存段。
- 检查信号量是否存在。如果存在,则删除。
- 查看信号量。
# ipcs -s
系统显示如下信息时,表示Oracle信号量存在。
key semid owner perms nsems 0x17ff6454 360448 oracle 640 154
复制 - 清除oracle的信号量。
# ipcrm -s 360448
说明:
360448是信号量ID,以系统实际查询值为准。 - 再次查询确认。
# ipcs -s
删除成功,系统显示如下信息:------ Semaphore Arrays -------- key semid owner perms nsems
复制
- 查看信号量。
- 重新启动数据库。
SQL> startup
数据库启动成功,系统显示如下信息:ORACLE instance started. Total System Global Area 2137886720 bytes Fixed Size 2122920 bytes Variable Size 1191185240 bytes Database Buffers 939524096 bytes Redo Buffers 5054464 bytes Database mounted. Database opened.
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle DataGuard高可用性解决方案详解
孙莹
580次阅读
2025-03-26 23:27:33
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
537次阅读
2025-04-15 17:24:06
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
441次阅读
2025-04-18 14:18:38
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
434次阅读
2025-04-08 09:12:48
墨天轮个人数说知识点合集
JiekeXu
432次阅读
2025-04-01 15:56:03
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
431次阅读
2025-04-22 00:20:37
Oracle SQL 执行计划分析与优化指南
Digital Observer
431次阅读
2025-04-01 11:08:44
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
408次阅读
2025-04-22 00:13:51
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
396次阅读
2025-04-20 10:07:02
Oracle 19c RAC更换IP实战,运维必看!
szrsu
371次阅读
2025-04-08 23:57:08