一则 ORA-00471 处理方法
公司新上架一台服务到机房,硬件是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.出现故障的原因:
在32位CPU下寻址范围是有限的,Linux内核定义了下面三个区域:
# DMA: 0x00000000 - 0x00999999 (0 - 16 MB)
# LowMem: 0x01000000 - 0x037999999 (16 - 896 MB) - size: 880MB
# HighMem: 0x038000000 - (由服务器硬件决定 )
在 32位系统中,内存被分为 以上3 个区域,DMA zone,Normal 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进程杀死.
2.为什么我们系统物理内存有60G,还会耗尽Lowmem?
目前系统内存详细情况如下,红色字体为NORMAL ZONE(也叫做LOWMEM区)
oracle@dzjg:~> free -lm
total used free shared buffers cached
Mem: 62174 479 61695 0 49 299
Low: 181 108 73
High: 61992 370 61622
-/+ buffers/cache: 130 62044
Swap: 8189 0 8189
oracle@dzjg:~> cat /proc/meminfo
MemTotal: 63666656 kB
MemFree: 63093160 kB
Buffers: 69124 kB
Cached: 352836 kB
SwapCached: 0 kB
Active: 173088 kB
Inactive: 299200 kB
HighTotal: 63480528 kB
HighFree: 63044476 kB
LowTotal: 186128 kB
LowFree: 48684 kB
SwapTotal: 8385920 kB
可以看到lowmem total为181MB严重小于880MB,出现这个现象的原因是32位系统使用一种PAE kernel的技术(内存扩展)来管理主机所有的物理内存,而PAE Kernel的管理工作需要消耗一部分lowmem内存,通常为每16G就要消耗128MB的lowmem。而我们的主机物理内存高至60G从而导致lowmem耗尽。
解释:Physical Address Extension(PAE,中文译名:物理地址扩展)技术最初是为了弥补32位地址在PC服务器应用上的不足而推出的。我们知道,传统的IA32架构只有32位位,这样,系统就能够容纳2^36=64GB的内存。
综上所述,建议如下解决办法,供参考:
办法1:升级到64位系统,这是最好的方法,因为此时所有的内存都属low memory,如此时提示out of memory,则真的是low memory耗尽,真的out of memory了。
办法2:拔内存,使主机物理内存将至8G左右,从而降低PAE Kernel消耗过多的Lowmem.;
办法3:升级系统内核到2.6以上版本(或者重新编译系统内核参数增加lowmem的值)---谨慎使用。
一则 ORA-00471 处理方法的更多相关文章
- Oracle的tnsnames.ora配置(PLSQL Developer)
首先打开tnsnames.ora的存放目录,一般为D:\app\Administrator\product\11.2.0\client_1\network\admin,就看安装具体位置了. 步骤阅读 ...
- 转载《Oracle的tnsnames.ora配置(PLSQL Developer)》
源地址:https://www.cnblogs.com/qq3245792286/p/6212617.html. 首先打开tnsnames.ora的存放目录,一般为D:\app\Administrat ...
- service name和SID的区别
数据库名(DB_NAME).实例名(Instance_name).以及操作系统环境变量(ORACLE_SID) 在ORACLE7.8数据库中只有数据库名(db_name)和数据库实例名(instan ...
- Oracle 11g RAC OCR 与 db_unique_name 配置关系 说明
一. 问题一 在做RAC standby 的alert log里发现如下错误: SUCCESS: diskgroup DATA was mounted ERROR: failed toestablis ...
- Linux服务器中安装Oracle
笔者手动安装成功 一,oracle安装前的准备与配置 1,修改stsctl.conf文件 Linux是为小文件设计的,Oracle数据库安装需要占用较多资源,要把各项参数调大. 使用vi编辑/etc/ ...
- 如何找回Oracle所有用户丢失的密码
如何找回Oracle所有用户丢失的密码: 方法一:1.以操作系统验证的方式登录 SQL>conn / as sysdba; 2.查看系统中的用户名. SQL>select USERNAME ...
- Oracle的网络监听配置
listener.ora.tnsnames.ora和sqlnet.ora这3个文件是关系oracle网络配置的3个主要文件,都是放在$ORACLE_HOME\network\admin目录下.其中li ...
- PLSQL:orecal,tnsname简介
导入ORACLE遇到很多问题,学了好多,其中很长时间花在网络配置上,刚开始学,具体原因不知道,先把搜集到的好文章存下来,以后慢慢研究. 监听配置文件 为了使得外部进程 如 CA ...
- 数据库名(DB_NAME)、实例名(Instance_name)、以及操作系统环境变量(ORACLE_SID)
数据库名(DB_NAME).实例名(Instance_name).以及操作系统环境变量(ORACLE_SID) 在ORACLE7.8数据库中只有数据库名(db_name)和数据库实例名(instanc ...
- Oracle 数据库名、实例名、Oracle_SID
本文参考自ORACLE 数据库名.实例名.ORACLE_SID的区别,纯属读书笔记,加深记忆 在ORACLE7.8数据库中只有数据库名(db_name)和数据库实例名(instance_name).在 ...
随机推荐
- QT学习 之 QwtPlot(数学绘图)
QT对于统计图像.函数图像等的绘制是没有相关组件的帮助的,只有利用手工绘制图片. QwtPlot是用来绘制二维图像的widget,继承自QFrame 和 QwtPlotDict.不过严格的说来,它只是 ...
- 实用推荐:12款Linux系统恢复工具
12款Linux系统恢复工具 电脑死机,系统崩溃,总会给电脑使用者带来一定的损失.你是否不小心删除你的纪念图片?安装新系统时候,擦除了分区表?无法读取旧CD里面的数据?别急嘛-我们将会给您推荐一些免费 ...
- Flow Problem(最大流)
Flow Problem Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Tot ...
- RAC Cache Fusion 原理理解
cache fusion . grd . drm . gcs . ges cache fusion 1.RAC是一个数据库执行在多个实例上.通过DLM(Distributed ...
- JDBC批量运行executeBatch
JDBC运行SQL语句,有两个处理的接口,一个PreparedStatement,Statement,一般操作JDBC比較用得多的还是PreparedStatement 只是在运行批量,Prepare ...
- 关于FTP操作的功能类
自己在用的FTP类,实现了检查FTP链接以及返回FTP没有反应的情况. public delegate void ShowError(string content, string title); // ...
- poj1742 多重背包的可行性问题
http://poj.org/problem? id=1742 Description People in Silverland use coins.They have coins of value ...
- javascript实现贪吃蛇
<html> <head> <style> body { background:#444; } .rect { border:1px solid #94F; wid ...
- ThinkPHP - F函数,更新配置文件
Html代码: <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset=&quo ...
- VirtualBox中的Ubuntu没有权限访问共享文件夹/media/sf_bak
之前已经搞定可以自动共享文件夹了,但是现在发现无法去访问,非root用户下,使用“ls /media/sf_bak”提示没有权限,当然如果切换到root,是可以的. [解决过程]1.把普通用户名加入到 ...