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??完成这个操作之后,数据库就可以正常启动了。?这个案例告诉我们的是,如果采用特殊手段来进行维护和管理,那么必须清楚这些操作可能带来的影响和后果。 |
|