学习是一种信仰。
分类: Oracle
2013-09-18 09:39:11
oracle@Africa:~> sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Fri Sep 13 13:52:52 2013
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORA-00845: MEMORY_TARGET not supported on this system
oracle@Africa:~> sqlplus pis_product/pis
SQL*Plus: Release 11.2.0.1.0 Production on Fri Sep 13 14:45:58 2013
Copyright (c) 1982, 2009, Oracle. All rights reserved.
ERROR:
ORA-01034: ORACLE not available
ORA-27102: out of memory
Linux-x86_64 Error: 12: Cannot allocate memory
Additional information: 1
Additional information: 163843
Additional information: 8
Process ID: 0
Session ID: 0 Serial number: 0
Enter user-name:
网上解决办法:
1、万仔的一个客户数据库在修改了ORACLE的内存配置后,重启报ORA-27102。很显然,这个错误是不正确的修改了ORACLE的内存配置所导致的。
该客户的ORACLE数据库是9201,安装在WINDOWS。在32位WINDOWS,ORACLE的内存不能超过2G(SGA+PGA),其中SGA不能超过1.7G.。我将其内存更改过来后,ORA-27102错误不再抛出,ORACLE成功启动。当然,由于是9I,所以ORACLE的SGA和PGA的调整始终是一个迭代的过程,很难一次调整到位。你如果增加了PGA,降低SGA时,可能对SQL的排序性能有提升,但可能对DB的读写性能稍微有影响,反之,当你增加SGA,调低PGA时,对DB的读写性能有提升,但降低SQL语句的排序操作性能。SGA和PGA的分配比例没有绝对的标准,有些人说1:1或1:0.8,其实这些都只是经验值,不一定符合你的数据库实际环境。所以,ORACLE的内存调整一定是要经过反复的观察,才可以找到最佳值(调整后,加载工作量,查看各项数据库性能指标,然后根据分析报告,再作进一步的调整,直到找到最佳的内存配置。
2、为什么会出现这样的问题叻,是因为在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’;
重启服务,即可。
在附上一个方法,如果当时忘记备份spfile文件叻,可以用以下方法
删除%ORACLE_HOME%\DATABASE\SPFILE%ORACLE_SID%.ORA文件,然后启动的时候就会去找$ORACLE_BASE/admin/pfile/init.ora或者$ORACLE_BASE/admin/pfile/init$SID.ora,这两个文件是pfile文件,是文本的,你可以直接修改里面的值,然后重启数据库。
我的解决:
我的是测试环境,没有深究该问题;
数据库启动时报错,无法启动,重启机器后问题解决。