你好,游客 登录 注册 搜索
背景:
阅读新闻

ORA-00471 处理方法笔记

[日期:2013-09-12] 来源:Linux社区  作者:junhuaqiu [字体: ]

公司新上架一台服务到机房,硬件是IBM X3850 X5,硬件配置算是好的,内存有128GB。SA安装好系统--(版本sule 32bit)后通知我可以安装数据库了。忙活半天,安装好Oracle 9204后,准备建表空间导入数据。因为数据量比较大,我打算建立一个10G的数据文件用来存储这写数据。打入创建表空间的命令后,没过多久数据库出现宕机现象。后来我又重新操作一遍还是故障依旧。以下是日志信息:

alert.log:

Errors in file /u01/oracle/admin/orcl/bdump/orcl_pmon_13918.trc:
ORA-00471: DBWR process terminated with error
Wed Aug 21 15:56:16 2013
PMON: terminating instance due to error 471
Instance terminated by PMON, pid = 13918

 

trace file:

/u01/oracle/admin/orcl/bdump/orcl_pmon_13918.trc
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production
ORACLE_HOME = /u01/oracle/product/9.2.0
System name: Linux
Node name: dbprod
Release: 2.6.27.19-5-pae
Version: #1 SMP 2009-02-28 04:40:21 +0100
Machine: i686
Instance name: orcl
Redo thread mounted by this instance: 1
Oracle process number: 2
Unix process pid: 13918, image:
oracle@dbprod</a> (PMON)

*** 2013-08-21 15:56:16.296
*** SESSION ID:(1.1) 2013-08-21 15:56:16.277
error 471 detected in background process
ORA-00471: DBWR process terminated with error

 

/var/log/messages:

Aug 21 14:01:14 dzjg kernel: lowmem_reserve[]: 0 872 62301 62301
Aug 21 14:01:14 dzjg kernel: Node 0 Normal free:3704kB min:3744kB low:4680kB high:5616kB active:3096kB inactive:3092kB present:893200kB

Aug 21 14:01:14 dzjg kernel: Out of memory: kill process 12867 (oracle) score 414016 or a child
Aug 21 14:01:14 dzjg kernel: Killed process 12867 (oracle)

初步判断是系统内存不够,但是通过free -m查看系统有60G的内存。通过上网查阅相关文档对故障分析如下:

1.出现故障的原因:

32CPU下寻址范围是有限的,Linux内核定义了下面三个区域:

# DMA: 0x00000000 - 0x00999999 (0 - 16 MB)

 

# LowMem: 0x01000000 - 0x037999999 (16 - 896 MB) - size: 880MB

 

# HighMem: 0x038000000 - (由服务器硬件决定

 

32位系统中,内存被分为 以上3 个区域,DMA zoneNormal zone(也叫做LowMem)和 HighMem zone其中 DMA zone主要用于 DMA 传输数据,位于低地址空间,其服务对象为各种驱动程序,其大小为 16MB,其中 LowMem (也叫做Normal zone) kernel 可以直接访问的地址空间,其大小为 880 MB,基本上所有的内核数据都在这个区域,同时如果内核要访问更高地址空间的内容,均需要通过 Normal zone映射过去才可以。地址空间大于 880 MB 的为 HIghMem zone.

 

截取的系统日志如下:

Aug 21 14:01:14 dzjg kernel: lowmem_reserve[]: 0 872 62301 62301
Aug 21 14:01:14 dzjg kernel: Node 0 Normal free:3704kB min:3744kB low:4680kB high:5616kB active:3096kB inactive:3092kB present:893200kB

Aug 21 14:01:14 dzjg kernel: Out of memory: kill process 12867 (oracle) score 414016 or a child
Aug 21 14:01:14 dzjg kernel: Killed process 12867 (oracle)

我们可以看到normal zone free 3704KB < min 3744KB,内核申请最小的内存3744KB,此时系统空闲的lowmem 3704KB,不能满足需求。该问题是low memory耗尽,因为内核使用low memory来跟踪所有的内存分配。当low memory耗尽,不管high memory剩多少,会触发oom-killer机制(out of memory killer)杀死进程,以保持系统的正常运行。根据一些文档描述,OOM-Killer 2.4 2.6 上表现是不一样的。2.4的版本中是把新进来(新申请内存)的进程杀掉。而 2.6上是杀掉占用内存最厉害的进程(这是很危险的,很容易导致系统应用瘫痪)。我们目前的系统内核版本为2.6,从而导致系统将数据库LGWR进程杀死.

相关阅读:

SPFILE 错误导致数据库无法启动(ORA-01565) http://www.linuxidc.com/Linux/2013-08/88932.htm

ORA-01172、ORA-01151错误处理 http://www.linuxidc.com/Linux/2013-06/86529.htm

ORA-00600 [2662]错误解决 http://www.linuxidc.com/Linux/2013-06/86528.htm

ORA-01078 和 LRM-00109 报错解决方法 http://www.linuxidc.com/Linux/2012-07/66044.htm

linux
相关资讯       ORA-00471 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款