ORA-27102: out of memory 解决实例

inthirties
锦翰科技总经理
博客专家认证
2009-05-02 01:53:59
加精
最开始一次给客户做优化设置的时候,出现过一个这样的错,那时候没有经验,数据库怎么都起不来,自己吓得不行了,回来幸好找到一个有经验的前辈,才得以解决。

时间几年过去了,再也没有发生,这几天忽然想起一起那次的事,不由的想把当时的情况模拟出来,自己来处理一次叻。

问题是怎么出现的,

首先在32位机器上,配置sga的内存超过1.5G,基本上就出现这个问题叻

这里还有一点要知道,sga_max_size可以自动来变动的,当sga的内存组件的和小于sga_max_size的时候,sga_max_size不会改变,还是维持自己的值,如果超过了这个和,sga_max_size的就会自动变动成和的值,这个你可以自己试试。

看看我的内存情况

Total System Global Area 965812724 bytes

Fixed Size 455156 bytes

Variable Size 251658240 bytes

Database Buffers 713031680 bytes

Redo Buffers 667648 bytes

这是我的windowxp上的实例,

我现在想调整database buffer的值到1G,我只需要设置db_cache_size到1G,而不设置sga_max_size,这时由于各组件值大于sga_max_size目前值,所以sga_max_size自动变化。

SQL>alter system set db_cache_size=1000M scope=spfile;

SQL> shutdown immediate;

SQL> startup;

看看现在的内存信息

Total System Global Area 1301357848 bytes

Fixed Size 455960 bytes

Variable Size 251658240 bytes

Database Buffers 1048576000 bytes

Redo Buffers 667648 bytes

发现sga_max_size已经自动变化

SQL> show parameters sga_

NAME TYPE VALUE

———————————— ——————————— ———

sga_max_size big integer 130135784

也已经变化叻。



现在模拟我们的问题吧

不过模拟前,先把我们的init.Ora备份一下,不备份init.Ora当然也不可以不过,等下恢复设置的东西太多,麻烦。

先把我们调整内存钱的parameter备份一下吧

SQL>create pfile=’F:\Synchrophy\Server\oracle\admin\ORA9i\pfile\init.bak.ora’ from spfile;

这句话就是把你的spfile备份到pfile文件里,由于spfile是二进制的文件,不好修改,所以我们一般用这样的形式来备份。

备份好。我们可以放心的改我们的内存叻

SQL> alter system set db_cache_size=1500M scope=spfile;

SQL> shutdown immediate;

SQL> startup;

现在问题出现了吧

一起看看

ORA-27102: out of memory

OSD-00022: Message 22 not found; product=RDBMS; facility=SOSD

O/S-Error: (OS Not enough storage is available to process this command.

为什么会出现这样的问题叻,是因为在32位的机器上Oracle的内存有限制,内存最大4G,32位留50%给操作系统,window是单线程的,不能超过1.7G。out of memory也就出来叻。

那么碰到这个问题我们如何解决了。如果了解Oracle的init的启动的话,做这个恢复就比较简单了,默认oralce是从spfile先启动的,

你可以这样查到路径

SQL> show parameter pfile



NAME TYPE VALUE

———————————— ———– ——————————

spfile string %ORACLE_HOME%\DATABASE\SPFILE%

ORACLE_SID%.ORA

所以你先在可以通过修改这个文件里的相关参数的值来恢复,不过修复的时候注意,这是个二进制文件,要保持二进制的格式。

还有方法用我们刚才的pfile来恢复。

SQL>startup pfile=’你备份的init.ora’;

如果在window下,需要

SQL>create spfile from pfile=’你备份的init.ora’;

重启服务,即可。
...全文
29545 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
inthirties 2009-05-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lpc19598188 的回复:]
ASMM虽然自动调整,但一样可以手动设置shared_pool_size, db_cache_size

我主要对下面这段话有疑问:

-- 这里还有一点要知道,sga_max_size可以自动来变动的,当sga的内存组件的和小于sga_max_size的时候,sga_max_size 不会改变,还是维持自己的值,如果超过了这个和,sga_max_size的就会自动变动成和的值,这个你可以自己试试。

那么,sga_max_size自动变动需要满足哪些条件?

[/Quote]

是的,不过是如果手工设置了,这几个值将不在会自动伸缩,所以10g里手工配置这是不为推荐的。

关于sga_max_size的值自动变,是我在oracle9.2.0.1.0下研究内存配置时做的试验,以前给客户做维护的时候出现一次,后来过很了很久,就回想当时的操作来模拟出错误做一下研究,开始以为是其他组件的和超过了就出错,结果就是出不了错,而且发现sga_max_size小于和的时候,就会自己变化,最后想想,上次维护是给客户做优化,才想到有可能是自己一味的加大内存而导致超过oracle内存限制,这才模拟出那时的错误的。

我刚才有试了一次,确实是自动变的哟。我修改的是db_cache_size和db_cache_size。


又是违规昵称 2009-05-08
  • 打赏
  • 举报
回复
ASMM虽然自动调整,但一样可以手动设置shared_pool_size, db_cache_size

我主要对下面这段话有疑问:

-- 这里还有一点要知道,sga_max_size可以自动来变动的,当sga的内存组件的和小于sga_max_size的时候,sga_max_size 不会改变,还是维持自己的值,如果超过了这个和,sga_max_size的就会自动变动成和的值,这个你可以自己试试。

那么,sga_max_size自动变动需要满足哪些条件?
superhsj 2009-05-08
  • 打赏
  • 举报
回复
赞lz,我顶
inthirties 2009-05-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 inthirties 的回复:]
引用 3 楼 lpc19598188 的回复:

win 2003 enterprise
win advanced server limited
等系统下,intel的处理器, 是有办法允许应用程序寻址超过4g内存的

------------------------

还有,楼主这篇文章基于什么环境的呢?os? oracle version?
我本机os是xp sp2, oracle 10.2.0.1,测试情况是这样的:

SQL> show parameter sga;

NAME                                TYPE        VALUE
--------------------------------…
[/Quote]

只需要调整sga_target的大小,10g会根据你的生产运行的实际情况,来自行分配相关的内存指标。
inthirties 2009-05-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lpc19598188 的回复:]
win 2003 enterprise
win advanced server limited
等系统下,intel的处理器, 是有办法允许应用程序寻址超过4g内存的

------------------------

还有,楼主这篇文章基于什么环境的呢?os? oracle version?
我本机os是xp sp2, oracle 10.2.0.1,测试情况是这样的:

SQL> show parameter sga;

NAME                                TYPE        VALUE
------------------------------------ ----------- --------------…
[/Quote]

不好意思,我的平台是xp sp2+oracle9.2.0.1.0,不是10g,10g里引入了ASSM的技术,是不需要你调整sga_max_size,share pool,buffer cache的大小的。


又是违规昵称 2009-05-08
  • 打赏
  • 举报
回复
win 2003 enterprise
win advanced server limited
等系统下,intel的处理器, 是有办法允许应用程序寻址超过4g内存的

------------------------

还有,楼主这篇文章基于什么环境的呢?os? oracle version?
我本机os是xp sp2, oracle 10.2.0.1,测试情况是这样的:

SQL> show parameter sga;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 584M
sga_target big integer 584M
SQL> alter system set db_cache_size = 1000m;
alter system set db_cache_size = 1000m
*
第 1 行出现错误:
ORA-32017: 更新 SPFILE 时失败
ORA-00384: 没有足够的内存来增加高速缓存的大小


SQL> alter system set db_cache_size = 1000m scope = spfile;
alter system set db_cache_size = 1000m scope = spfile
*
第 1 行出现错误:
ORA-32017: 更新 SPFILE 时失败
ORA-00384: 没有足够的内存来增加高速缓存的大小

SQL> alter system set sga_max_size = 0;
alter system set sga_max_size = 0
*
第 1 行出现错误:
ORA-02095: 无法修改指定的初始化参数

--------------------------------------

楼主的sga_max_size如何做到自动调整大小的呢?
inthirties 2009-05-08
  • 打赏
  • 举报
回复
同意
又是违规昵称 2009-05-08
  • 打赏
  • 举报
回复
可能是版本的不同缘故吧,呵呵

关于asmm,10gR2文档中有这样一段话:
Database buffer cache (default pool)
Shared pool
Large pool
Java pool
Streams pool

If these automatically tuned memory pools had been set to nonzero values, those values are used as a minimum levels by Automatic Shared Memory Management. You would set minimum values if an application components needs a minimum amount of memory to function properly.

我的理解是,这几个值是最小值,ASMM会在满足minimum的基础上进行自动调整

Tomac 2009-05-02
  • 打赏
  • 举报
回复
不错
inthirties 2009-05-02
  • 打赏
  • 举报
回复
那个时候,在网上看到有人提到这样的问题,但是没有说到过解决方法的,这是自己后来了解到init的方式以后,自己试验出来的,和大家一起分享一下。

在附上一个方法,如果当时忘记备份spfile文件叻,可以用以下方法
删除%ORACLE_HOME%\DATABASE\SPFILE%ORACLE_SID%.ORA文件,然后启动的时候就会去找$ORACLE_BASE/admin/pfile/init.ora或者$ORACLE_BASE/admin/pfile/init$SID.ora,这两个文件是pfile文件,是文本的,你可以直接修改里面的值,然后重启数据库。

记住作为DBA,在做任何修改前,一定要先备份相关文件哟。至少可以恢复到出错时的状态。用这个方法的时候,也注意要先备份一下哟。


====================================================================================

如果你需要帮助或想和我一起学习的请联系
联系方式QQ:370140387
QQ群: 85837884(注明:数据库)
电子邮件:dba@Inthirties.com
网站: http://www.inthirties.com

 针对数据库的启动和关闭、控制文件与数据库初始化、参数及参数文件、数据字典、内存管理、Buffer Cache与Shared Pool原理、重做、回滚与撤销、等待事件、性能诊断与SQL优化等几大Oracle热点主题,本书从基础知识入手,深入研究相关技术,并结合性能调整及丰富的诊断案例,力图将Oracle知识全面、系统、深入地展现给读者。   本书给出了大量取自实际工作现场的实例,在分析实例的过程中,兼顾深度与广度,不仅对实际问题的现象、产生原因和相关的原理进行了深入浅出的讲解,更主要的是,结合实际应用环境,提供了一系列解决问题的思路和方法,包括详细的操作步骤,具有很强的实战性和可操作性,适用于具备一定数据库基础、打算深入学习Oracle技术的数据库从业人员,尤其适用于入门、进阶以及希望深入研究Oracle技术的数据库管理人员。 第1章 数据库的启动和关闭 1 1.1 数据库的启动 1 1.1.1 启动数据库到NOMOUNT状态的过程 2 1.1.2 启动数据库到MOUNT状态 18 1.1.3 启动数据库OPEN阶段 26 1.2 数据库的访问 37 1.2.1 客户端的TNSNAMES.ORA文件配置 37 1.2.2 服务器端的监听器文件listener.ora配置 39 1.2.3 通过不同服务器名对数据库的访问 41 1.2.4 动态监听器注册服务 42 1.3 数据库的关闭 46 1.3.1 数据库关闭的步骤 46 1.3.2 几种关闭方式的对比 48 第2章 控制文件与数据库初始化 51 2.1 控制文件的内容 51 2.2 SCN 53 2.2.1 SCN的定义 53 2.2.2 SCN的获取方式 53 2.2.3 SCN的进一步说明 54 2.3 检查点(Checkpoint) 57 2.3.1 检查点(Checkpoint)的工作原理 57 2.3.2 常规检查点与增量检查点 59 2.3.3 LOG_CHECKPOINT_TO_ALERT参数 63 2.3.4 控制文件与数据文件头信息 64 2.3.5 数据库的启动验证 66 2.3.6 使用备份的控制文件 70 2.3.7 FAST_START_MTTR_TARGET 71 2.3.8 关于检查点执行的案例 74 2.3.9 Oracle 10g自动检查点调整 75 2.3.10 检查点信息及恢复起点 78 2.3.11 正常关闭数据库的状况 78 2.3.12 数据库异常关闭的情况 80 2.3.13 数据库并行恢复案例一则 82 2.3.14 判断一个死事务的恢复进度 85 2.4 数据库的初始化 86 2.4.1 bootstrap$及数据库初始化过程 86 2.4.2 bootstrap$的定位 88 2.4.3 Oracle中独一无二的Cache对象 89 2.4.4 Oracle数据库的引导 91 2.4.5 系统对象与bootstrap$ 92 2.4.6 bootstrap$的重要性 94 2.4.7 BBED工具的简要介绍 95 2.4.8 坏块的处理与恢复 97 第3章 参数及参数文件 103 3.1 初始化参数的分类 103 3.1.1 推导参数(Derived Parameters) 103 3.1.2 操作系统依赖参数 104 3.1.3 可变参数 104 3.1.4 初始化参数的获取 105 3.2 参数文件 107 3.2.1 PFILE和SPFILE 108 3.2.2 获取参数的视图 110 3.2.3 SPFILE的创建 111 3.2.4 SPFILE的搜索顺序 112 3.2.5 使用PFILE/SPFILE启动数据库 112 3.2.6 修改参数 113 3.2.7 解决SPFILE参数修改错误 118 3.2.8 重置SPFILE中设置的参数 120 3.2.9 判断是否使用了SPFILE 120 3.2.10 SPFILE的备份与恢复 121 3.2.11 Oracle 11g参数文件恢复 127 3.2.12 如何设置Events事件 128 3.2.13 导出SPFILE文件 129 3.3 诊断案例之一:参数文件 131 3.3.1 登录系统检查告警日志文件 131 3.3.2 尝试重新启动数据库 132 3.3.3 检查数据文件 132 3.3.4 MOUNT数据库,检查系统参数 133 3.3.5 检查参数文件 133 3.3.6 再次检查alert文件 134 3.3.7 修正PFILE 135 3.3.8 启动数据库 135 3.4 诊断案例之二:RAC环境参数文件 135 3.4.1 数据库资源异常 135 3.4.2 问题的发现 136 3.4.3 参数文件问题的解决 137 第4

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧