1.1 现象描述
登录数据库失败,系统显示如下错误信息:
SQL*Plus: Release 11.1.0.6.0 - Production on Mon Aug 3 11:40:38 2009
Copyright (c) 1982, 2007, 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: 12713986
Additional information: 8
Process ID: 0
Session ID: 0 Serial number: 0
1.2 可能原因
错误信息提示Oracle无法获取内存。原因是系统内存小于Oracle参数配置的“memory_target”值。
1.3 定位思路
1. 查看系统内存使用情况。
% free -l
系统显示内存使用信息如下:
total used free shared buffers cached
Mem: 8062444 7838364 224080 0 139428 5851104
Low: 8062444 7838364 224080
High: 0 0 0
-/+ buffers/cache: 1847832 6214612
Swap: 8393920 11084 8382836
由查询结果可知,系统显示内存为224080KB,说明可用内存充足。
2. 检查参数配置文件“spfile.ora”中的“memory_target”值。
% cat $ORACLE_HOME/dbs/spfile.ora
系统显示文件信息如下:
......
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.memory_target=3300917248
*.open_cursors=300
*.processes=150
........
由查询结果可知,Oracle参数配置的“memory_target”值为3300917248bit,大于系统的可用内存,导致登录失败。
1.4 处理步骤
以oracle用户登录数据库所在机器。
以sysdba用户连接数据库。
% sqlplus / as sysdba
通过spfile文件创建pfile文件。
SQL> create pfile='$ORACLE_HOME/dbs/new_pfile_ora' from spfile;
退出sqlplus。
SQL> quit
修改3创建的pfile文件中的“memory_target”参数值。
% vi $ORACLE_HOME/dbs/new_pfile_ora
.....
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.memory_target=2000917248
*.open_cursors=300
.......
将“memory_target”修改为小于系统可用内存的值。
重新以sysdba用户连接数据库。
% sqlplus / as sysdba
重新生成spfile文件。
SQL> create spfile from pfile='$ORACLE_HOME/dbs/new_pfile_ora';
关闭数据库。
SQL> shutdown immediate
重新启动数据库。
SQL> startup
退出。
SQL> quit
重新使用SQLPLUS连接数据库。
% sqlplus / as sysdba
连接数据库成功,系统显示如下信息:
SQL*Plus: Release 11.1.0.7.0 - Production on Wed Aug 24 07:28:54 2011
Copyright (c) 1982, 2008, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options