DBA警世录:Oracle的共享内存段

最近看到ITPUB上有这样一个帖子,觉得有点意思,收录一下,以为借鉴。

这位朋友的Apache和Oracle运行在同一台主机上:平台是redhat as 3 ,oracle 9204.

其他应用是apache,resin等。

因为以前发现apache运行时间长以后会出现共享内存不足的错误,具体错误信息如下:

[Fri Apr 13 06:00:03 2007] [error] shm.create(): error creating shm 2 No such file or directory

[Fri Apr 13 06:00:03 2007] [error] shm.create(): error creating shm /home/apache/logs/shm.file

[Fri Apr 13 06:00:03 2007] [warn] pid file /home/apache/logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?

[Fri Apr 13 06:00:03 2007] [emerg] (28)No space left on device: Couldn't create accept lock

为了解决这个问题,这位同学的解决方法是:因此,我写了一个脚本,来定时检测并清理。一直很有效。

当Apache和Oracle跑在同一台主机上时,这个脚本就出现了Bug:前一段时间,新开了一个小应用,也是apache的应用,由于没地方放了,就放到oracle机器上了,一直运行比较好;

今天早上接到信息,说新开的这个apache应用服务停止了,打开log一看,又是共享内存的问题,二话不说,把原来的脚本在系统上跑了一遍,restart apache,ok。系统可以了。

过了几分钟。问题大了,说oracle服务宕了。赶紧检查,ps -ef|oracle 服务都没了

由于脚本中缺少必要的判断,Oracle的共享内存段也别清除,所以Oracle数据库也挂了,alterlog文集中记录了如下信息:Errors in file /opt/oracle/admin/sc1/bdump/sc1_reco_5195.trc:

ORA-27157: OS post/wait facility removed

ORA-27300: OS system dependent operation:semop failed with status: 43

ORA-27301: OS failure message: Identifier removed

ORA-27302: failure occurred at: sskgpwwait1

Fri Apr 13 10:10:46 2007

Errors in file /opt/oracle/admin/sc1/bdump/sc1_smon_5193.trc:

ORA-27157: OS post/wait facility removed

ORA-27300: OS system dependent operation:semop failed with status: 43

ORA-27301: OS failure message: Identifier removed

ORA-27302: failure occurred at: sskgpwwait1

Fri Apr 13 10:10:46 2007

RECO: terminating instance due to error 27157

Fri Apr 13 10:10:46 2007

Errors in file /opt/oracle/admin/sc1/udump/sc1_ora_23824.trc:

ORA-27153: wait operation failed

ORA-27300: OS system dependent operation:semop failed with status: 22

ORA-27301: OS failure message: Invalid argument

ORA-27302: failure occurred at: sskgpwwait2

Fri Apr 13 10:10:46 2007

Errors in file /opt/oracle/admin/sc1/bdump/sc1_lgwr_5189.trc:

Oracle数据库是需要再系统上分配共享内存段的,这个是基本的常识,在故障之后,这位同学才想起来:[root@oracle]# ipcs -s

------ Semaphore Arrays --------

key semid owner perms nsems

0x00000000 4849664 nobody 600 1

0x00000000 4882433 nobody 600 1

0x00000000 4915202 nobody 600 1

0x00000000 4947971 nobody 600 1

0x00000000 4980740 nobody 600 1

0xbeae576c 5111813 oracle 640 201

0xbeae576d 5144582 oracle 640 201

0xbeae576e 5177351 oracle 640 201

0xbeae576f 5210120 oracle 640 201

0xbeae5770 5242889 oracle 640 201

0x00000000 5275658 nobody 600 1

0x00000000 5308427 nobody 600 1

0x00000000 5341196 nobody 600 1

0x00000000 5373965 nobody 600 1

0x00000000 5406734 nobody 600 1

0x00000000 5439503 nobody 600 1

0x00000000 5472272 nobody 600 1

0x00000000 5505041 nobody 600 1

果然有oracle的共享内存,而我的脚本没有判断。如果只是删除apache用户的共享内存,可以这样

ipcs -s | grep apache | perl -e 'while () { @a=split(/\s+/); print `ipcrm sem $a[1]`}'

如果大家谁的应用和我这个类似,一定注意。

其实这个故障还是一个低价的故障,首先如果我们在不同的服务器上运行同一个脚本,严谨的做法是需要经过检查、测试,以确认其正常运行性,未经过测试靠猜想是不值得信任的。

其次,作为严谨的一个方面,权限及运行脚本的用户身份是需要明确的,root用户执行任何操作都相当危险,应该慎之又慎。我在有些习惯DBA需要养成一文中对这方面曾有探讨。

话又说回来,如果这是一个重要的业务数据库,这样的操作引发的故障将是极为恐怖的(当然重要的系统这样的错误基本上也不会发生),所以作为一个DBA应该对自己的行为三思、多思而后行。

-The End-

By eygle on 2007-04-16 11:59 |

Comments (2) |

Beginner | 1413 |

2 Comments

在apache 上运行该脚本后,仍然需要重新启动apache吧,如果是这样的化,为什么不直接reload apache服务呢,比如凌晨3:00的时候?

ipcs -s 显示的是信号量,不是共享内存吧

ipcs -m才是共享内存

oracle12 共享内存不存在,DBA警世录:Oracle的共享内存段相关推荐

  1. DBA警世录:备份重于一切

    1.备份重于一切我们必需知道,系统总是要崩溃的,没有有效的备份只是等哪一天死!我经常开玩笑的说,唯一会使DBA在梦中惊醒的就是,没有有效的备份. 2.三思而后行 think thrice before ...

  2. 在Oracle 11g中用看Oracle的共享内存段---------IPCS

    很早之前,在一次讲课了,用了命令ipcs,发现oracle的共享内段好小,如下: oracle@mydb ~]$ ipcs -a------ Shared Memory Segments ------ ...

  3. DBA备录_ORA-24247_网络访问被访问控制列表 (ACL) 拒绝

    DBA备录_ORA-24247_网络访问被访问控制列表 (ACL) 拒绝 note-taker:Ethan_Yangrecording time: 2019/06/14number of docs:1 ...

  4. Delphi7 内存管理及 FastMM 研究 (对于EXE和DLL内存共享很有用) .

    [转] Delphi7 内存管理及 FastMM 研究 (对于EXE和DLL内存共享很有用) 故国之晚秋 发表于2010-12-06 19:34 浏览(32) 评论(0) 分类: 我的日记       ...

  5. [转]Oracle DB管理内存

    • 描述SGA 中的内存组件 • 实施自动内存管理 • 手动配置SGA 参数 • 配置自动PGA 内存管理 内存管理:概览 DBA 必须将内存管理视为其工作中至关重要的部分,因为: • 可用内存空间量 ...

  6. oracle启用amm,【内存管理】Oracle AMM自动内存管理详解

    一. Oracle 的三种内存管理方式 oracle 内存管理有三种方式,每一个 instance 只能够选择一种.这三种管理方式分别是 AMM 自动内存管理( Automatic Memory Ma ...

  7. oracle内存管理模式amm,Oracle 11g自动内存管理(AMM)相关的初始化参数

    Oracle对内存的管理越来越趋向智能化.自动化,从9i通过PGA_AGGREGATE_TARGET参数实现PGA的自动管理,10g通过Automatic Shared Memory Manageme ...

  8. 【Android 内存优化】使用 Memory Analyzer ( MAT ) 工具分析内存 ( MAT 工具使用 | 最大对象 | 类实例个数 | 引用与被引用 | GC Roots 最短链 )

    文章目录 一. 内存中最大的对象 二. 查看每个类的对象实例的个数 三. 查看对象的引用与被引用 四. 查看对象到 GC Roots 的最短距离 1. 选择 Merge Shortest Paths ...

  9. Oracle 自己主动内存管理 SGA、PGA 具体解释

    ASMM自己主动共享内存管理: 自己主动依据工作量变化调整 最大程度地提高内存利用率 有助于消除内存不足的错误 SYS@PROD>show parameter sga NAME          ...

最新文章

  1. 开源自动化机器学习框架
  2. centos上tensorflow一键安装脚本
  3. android应用程序的混淆打包
  4. 【python数据挖掘课程】十一.Pandas、Matplotlib结合SQL语句可视化分析
  5. slf4j介绍以及实现原理窥探
  6. 论文浅尝 - AAAI2020 | 通过句子级语义匹配和答案位置推断改善问题生成
  7. Flutter 开发应用第一个页面
  8. eclipse-阶段四-Server Tomcat v8.5 Server at localhost failed to start.
  9. 通过反射获取类的完整结构(1)--属性方法
  10. 个人取得工资、薪金所得应当如何缴纳个人所得税
  11. keil软件仿真打印输出配置
  12. 高等数学|微积分(上)知识点总结
  13. 【学习笔记】seckill-秒杀项目--(6)秒杀功能
  14. k8s服务器修改ip,k8s的kubeadm的master更换ip
  15. 斐讯路由器怎么设置虚拟服务器,斐讯无线路由器设置教程图解
  16. 《MacTalk 跨越边界》一一1.1 40岁了,还有没有路走?
  17. 数据库:一条sql语句查询每门课程都大于80分的学生姓名
  18. 专访Women in AI学者黄惠:绘图形之梦,寻突破之门
  19. [CTSC2016]时空旅行(线段树+凸包)
  20. 速算24点(C++)

热门文章

  1. 还原对于服务器失败 备份集中的数据库备份与现有数据库不同
  2. vsync信号产生与分发
  3. iPhone客户端开发笔记(一)
  4. 敏捷图书排行 (2011年修订)【转】
  5. 获取结构体某成员偏移
  6. Python之数据分析(算数平均值、加权平均值、最大值与最小值)
  7. python计算密集型任务_Python多进程和多线程测试比高低,只为证明谁是最快的“仔”
  8. 2021年10月Python小屋编程比赛获奖名单
  9. 《Python程序设计》实验指导书(30个实验)
  10. 奇怪,Python有的函数调用需要两对括号?(2)