DBA手记:共享内存无法正常释放的处理

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 10:46 点击:

在数据库启动之后,需要从操作系统上分配共享内存和信号量(Semaphore)资源,而在某些情况下,数据库异常关闭后,这些资源有可能无法正常释放,则在下次启动时,数据库可能遭遇错误,无法正常启动。 
 
在一个客户环境(操作系统为SUN Solaris平台)中出现了ORA-04031错误之后,使用了shutdown abort选项关闭了数据库: 
 
Sun Jul 19 19:20:23 2009 
 
Errors in file /ora9i/oracle/admin/ora9i/bdump/ora9i1_j000_14337.trc: 
 
ORA-12012: error on auto execute of job 721 
 
ORA-04031: unable to allocate 4088 bytes of shared memory ("shared pool","STANDARDSYS","PL/SQL MPCODE","BAMIMA: Bam Buffer") 
 
Sun Jul 19 19:24:24 2009 
 
Errors in file /ora9i/oracle/admin/ora9i/bdump/ora9i1_j000_17497.trc: 
 
ORA-12012: error on auto execute of job 721 
 
ORA-04031: unable to allocate 4088 bytes of shared memory ("shared pool","STANDARDSYS","PL/SQL MPCODE","BAMIMA: Bam Buffer") 
 
Sun Jul 19 19:26:56 2009 
 
Shutting down instance (abort) 
 
License high water mark = 1012 
 
Instance terminated by USER, pid = 19157 
 
接下来的尝试启动失败,告警日志记录了如下所示的错误信息: 
 
Sun Jul 19 19:35:27 2009 
 
Errors in file /ora9i/oracle/admin/ora9i/udump/ora9i1_ora_25055.trc: 
 
ORA-27154: post/wait create failed 
 
ORA-27300: OS system dependent operation:semget failed with status: 28 
 
ORA-27301: OS failure message: No space left on device 
 
ORA-27302: failure occurred at: sskgpsemsper 
 
注意以上信息中,提示失败的操作是semget,其实如果仔细阅读这个提示,就可以获知错误的真正原因,在操作系统可以通过man semget查看手册,了解出错的真实原因。以下输出告诉我们,semget的任务是获得信号量集(get set of semaphores),所以也就可以知道之前的提示No space left on device并不是指存储空间,而是信号量资源: 
 
oracle@db-server # man semget 
 
NAME
 
     semget - get set of semaphores 
 
SYNOPSIS 
 
     #include 
 
     #include 
 
     #include 
 
     int semget(key_t key, int nsems, int semflg); 
 
DESCRIPTION 
 
     The semget() function returns the semaphore identifier associated with key. 
 
知道了这个原因以后,就可以通过ipcs命令来找到数据库的信号量资源占用,该主机上有三个数据库,Oracle用户的信号量集就是没有正常释放的那个: 
 
oracle@db-server # ipcs -sa 
 
IPC status from as of Sun Jul 19 22:01:09 CST 2009 
 
T      ID      KEY        MODE        OWNER GROUP  CREATOR   CGROUP NSEMS   OTIME    CTIME 
 
Semaphores: 
 
s  851977   0x462fcb40 --ra-r----- orabil9 dbabil9  orabil9  dbabil9   604 22:07:58 12:54:47 
 
s 1769482   0x6b997db0 --ra-r----- oracle9    dba9  oracle9     dba9  2004 22:07:15 17:03:39 
 
s 1245195   0x8ea0d4d4 --ra-ra----  oracle   dba   oracle      dba  2004 no-entry 19:27:06 
 
接下来就可以通过操作系统的ipcrm命令

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • Request.ServerVariables 参数大全
      • 执行全文索引时出现权限不足的解决方法
      • 导入excel文件处理流程节点的解决方案
      • 查看sql修改痕迹(SQL Change Tracking on Table)
      • MongoDB安装为Windows服务方法与注意事项
      • App数据层设计及云存储使用指南
      • PostgreSQL启动过程中的那些事三:加载GUC参数
      • 写给MongoDB开发者的50条建议Tip1
      • Percolator与分布式事务思考(二)
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1