来自:mjsws > 馆藏分类
配色: 字号:
DBA共享内存无法正常释放的处理
2018-10-12 | 阅:  转:  |  分享 
  
DBA共享内存无法正常释放的处理在数据库启动之后,需要从操作系统上分配共享内存和信号量(Semaphore)资源,而在某些情况下,数据库异常
关闭后,这些资源有可能无法正常释放,则在下次启动时,数据库可能遭遇错误,无法正常启动。??在一个客户环境(操作系统为SUNSol
aris平台)中出现了ORA-04031错误之后,使用了shutdownabort选项关闭了数据库:??SunJul191
9:20:232009??Errorsinfile/ora9i/oracle/admin/ora9i/bdump/ora9
i1_j000_14337.trc:??ORA-12012:erroronautoexecuteofjob721??
ORA-04031:unabletoallocate4088bytesofsharedmemory("share
dpool","STANDARDSYS","PL/SQLMPCODE","BAMIMA:BamBuffer")??Sun
Jul1919:24:242009??Errorsinfile/ora9i/oracle/admin/ora9i/bd
ump/ora9i1_j000_17497.trc:??ORA-12012:erroronautoexecuteofj
ob721??ORA-04031:unabletoallocate4088bytesofsharedmemory
("sharedpool","STANDARDSYS","PL/SQLMPCODE","BAMIMA:BamBuffer
")??SunJul1919:26:562009??Shuttingdowninstance(abort)??Lic
ensehighwatermark=1012??InstanceterminatedbyUSER,pid=1
9157??接下来的尝试启动失败,告警日志记录了如下所示的错误信息:??SunJul1919:35:272009?棋牌评
测网http://www.77884.net?Errorsinfile/ora9i/oracle/admin/ora9i/u
dump/ora9i1_ora_25055.trc:??ORA-27154:post/waitcreatefailed??O
RA-27300:OSsystemdependentoperation:semgetfailedwithstatus
:28??ORA-27301:OSfailuremessage:Nospaceleftondevice??ORA
-27302:failureoccurredat:sskgpsemsper??注意以上信息中,提示失败的操作是semget
,其实如果仔细阅读这个提示,就可以获知错误的真正原因,在操作系统可以通过mansemget查看手册,了解出错的真实原因。以下输出
告诉我们,semget的任务是获得信号量集(getsetofsemaphores),所以也就可以知道之前的提示Nospac
eleftondevice并不是指存储空间,而是信号量资源:??oracle@db-server?#mansemget?
?NAME?semget-getsetofsemaphores??SYNOPSIS??#include??#inc
lude??#include??intsemget(key_tkey,intnsems,intsemflg);??
DESCRIPTION??Thesemget()functionreturnsthesemaphoreidentif
ierassociatedwithkey.??知道了这个原因以后,就可以通过ipcs命令来找到数据库的信号量资源占用,该主机
上有三个数据库,Oracle用户的信号量集就是没有正常释放的那个:??oracle@db-server?#ipcs-sa??I
PCstatusfromasofSunJul1922:01:09CST2009??T?????ID?????
KEY???????MODE???????OWNERGROUP?CREATOR??CGROUPNSEMS??OTI
ME???CTIME??Semaphores:??s?851977??0x462fcb40--ra-r-----orab
il9dbabil9?orabil9?dbabil9??60422:07:5812:54:47??s1769482?
?0x6b997db0--ra-r-----oracle9???dba9?oracle9????dba9?2004
22:07:1517:03:39??s1245195??0x8ea0d4d4--ra-ra----?oracle??d
ba??oracle?????dba?2004no-entry19:27:06??接下来就可以通过操作系统的ipcrm命
令来移除信号量集:??oracle@db-server?#manipcrm?移动电玩城http://www.44226.ne
t?NAME?ipcrm-removeamessagequeue,semaphoresetorsharedm
emoryid??执行过程如下所示:??oracle@db-server?#ipcrm-s1245195??oracle@
db-server?#ipcs-sa??IPCstatusfromasofSunJul1922:09:01C
ST2009??T?????ID?????KEY???????MODE???????OWNER???GROUP?CR
EATOR??CGROUPNSEMS??OTIME???CTIME??Semaphores:??s?851977??0
x462fcb40--ra-r-----orabil9dbabil9?orabil9?dbabil9??60422:
07:5812:54:47??s1769482??0x6b997db0--ra-r-----oracle9???dba9?oracle9????dba9?200422:07:1517:03:39??完成这个操作之后,数据库就可以正常启动了。?这个案例告诉我们的是,如果采用特殊手段来进行维护和管理,那么必须清楚这些操作可能带来的影响和后果。
献花(0)
+1
(本文系mjsws首藏)