(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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




