oracle启动报错ora-27102解决,此错误一般是因为数据库的初始化参数文件的内存设置不当导致。本例是因为操作系统参数设置问题导致
环境:rhel5.5 + oracle 10.2.0.4
此错误一般是因为数据库的初始化参数文件的内存设置不当导致。本例是因为操作系统参数设置问题导致。
1.当前现象:oracle启动报错ora-27102
2.检查各参数的配置情况
3.定位解决问题
4.延伸总结
1.当前现象:oracle启动报错ora-27102
[oracle@jydb1 ~]$ sqlplus / as sysdba
sql*plus: release 10.2.0.4.0 - production on 星期四 7月 30 19:55:10 2015
copyright (c) 1982, 2007, oracle. all rights reserved.
已连接到空闲例程。
sql> startup
ora-27102: out of memory
linux-x86_64 error: 28: no space left on device
2.检查各参数的配置情况
2.1 根据当前的spfile文件创建pfile文件
sql> create pfile='/tmp/pfile0730.bak' from spfile;
文件已创建。
查看当前的初始化参数配置信息:
[oracle@jydb1 dbs]$ more /tmp/pfile0730.bak
jyzhao.__db_cache_size=10938744832
jyzhao.__java_pool_size=117440512
jyzhao.__large_pool_size=16777216
jyzhao.__shared_pool_size=1442840576
jyzhao.__streams_pool_size=33554432
*.audit_file_dest='/opt/app/oracle//admin/jyzhao/adump'
*.background_dump_dest='/opt/app/oracle//admin/jyzhao/bdump'
*.compatible='10.2.0.3.0'
*.control_files='/usr3/oradata1/sysdata/control_file/control01.ctl','/usr3/oradata1/sysdata/control_file/control02.ctl','
/usr3/oradata1/sysdata/control_file/control03.ctl'
*.core_dump_dest='/opt/app/oracle//admin/jyzhao/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_files=2048
*.db_name='jyzhao'
*.dispatchers='(protocol=tcp) (service=jyzhaoxdb)'
*.job_queue_processes=10
*.nls_language='simplified chinese'
*.nls_territory='china'
*.open_cursors=300
*.pga_aggregate_target=1572864000
*.processes=600
*.remote_login_passwordfile='exclusive'
*.resource_limit=true
*.sessions=665
*.sga_target=12582912000
*.undo_management='auto'
*.undo_tablespace='undotbs1'
*.user_dump_dest='/opt/app/oracle//admin/jyzhao/udump'
可以看到,sga=12g,,pga=1.5g,
2.2 用pfile文件启动得到相同报错
startup pfile='/tmp/pfile0730.bak'
sql> startup pfile='/tmp/pfile0730.bak'
ora-27102: out of memory
linux-x86_64 error: 28: no space left on device
sql> !
2.3 检查主机的内存,/dev/shm,ipcs
2.3.1 内存空闲充足
[oracle@jydb1 10.2.0]$ free -g
total used free shared buffers cached
mem: 31 0 30 0 0 0
-/+ buffers/cache: 0 31
swap: 31 0 31
2.3.2 /dev/shm设置为16g,符合当前需求
[oracle@jydb1 10.2.0]$ df -h /dev/shm
文件系统 容量 已用 可用 已用% 挂载点
tmpfs 16g 0 16g 0% /dev/shm
2.3.3 ipcs -a也没有未释放的共享内存
[oracle@jydb1 10.2.0]$ ipcs -a
------ shared memory segments --------
key shmid owner perms bytes nattch status
------ semaphore arrays --------
key semid owner perms nsems
------ message queues --------
key msqid owner perms used-bytes messages
查到这里我们发现系统的硬件完全可以支持sga=12g,pga=1.5g的配置。
但此时实验了下,大概是只能以sga=6.5g的大小启动数据库。sga再大都会报错:ora-27102。
2.4 检查系统配置文件/etc/sysctl.conf
more /etc/sysctl.conf
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 25769803776
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
可以看到是按照11g 安装文档建议配置项配置的,其中kernel.shmmax是根据主机内存的75%计算来的。其他参数没有改变。
因为这里的环境是oracle 10g,所以我们还是按照10g官档的建议,修改为10g版本的安装文档配置项:
kernel.shmall = 2097152
kernel.shmmax = 25769803776
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144
sysctl -p 生效配置后,此时尝试启动数据库,结果很不幸,依旧报错ora-27102。
3.定位解决问题