环境: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

<h1 id="2">2.检查各参数的配置情况</h1>
## 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。

<h1 id="3">3.定位解决问题</h1>
Google了一下,发现还有可能是kernel.shmall这个参数导致的。
查看当前的shmmax和shmall配置

[root@JYDB1 ~]# cat /proc/sys/kernel/shmmax

25769803776

[root@JYDB1 ~]# cat /proc/sys/kernel/shmall

2097152

注释掉新增的kernel.shmall参数的配置(原/etc/sysctl.conf中有kernel.shmall的配置值为4294967296)

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

再次查看当前的shmmax和shmall配置

[root@JYDB1 ~]# cat /proc/sys/kernel/shmmax

25769803776

[root@JYDB1 ~]# cat /proc/sys/kernel/shmall

4294967296

此时重启数据库就可以sga=12G,pga=1.5G正常启动,那么之前的报错就是因为kernel.shmall参数的配置项过小导致了。

<h1 id="4">4.延伸总结</h1>
Oracle官档中,无论是10g还是11g,kernel.shmall参数的配置建议就是kernel.shmall = 2097152,那么在这里的环境有什么问题呢? **下面我们来弄清楚kernel.shmall这个参数的意义**

[root@JYDB1 ~]# cat /etc/redhat-release

Red Hat Enterprise Linux Server release 5.5 (Tikanga)

在RedHat 5的[文档](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Tuning_and_Optimizing_Red_Hat_Enterprise_Linux_for_Oracle_9i_and_10g_Databases/sect-Oracle_9i_and_10g_Tuning_Guide-Setting_Shared_Memory-Setting_SHMALL_Parameter.html)中,关于kernel.shmall这个参数有这样一段描述:

> **7.3. Setting SHMALL Parameter**
> This parameter sets the total amount of shared memory pages that can be used system wide. Hence, SHMALL should always be at least ceil(shmmax/PAGE_SIZE).
> The default size for SHMALL in Red Hat Enterprise Linux 2.1, 3, 4 and 5 is 2097152 which is also Oracle's recommended minimum setting for 9i and 10g on x86 and x86-64 platforms. In most cases this setting should be sufficient since it means that the total amount of shared memory available on the system is 2097152\*4096 bytes (shmall\*PAGE_SIZE) which is 8 GB. PAGE_SIZE is usually 4096 bytes unless you use Chapter 14, Large Memory Optimization, Big Pages, and Huge Pages which supports the configuration of larger memory pages. **查看系统默认的PAGE_SIZE值:**

[root@JYDB1 ~]# getconf PAGESIZE

4096

计算shmmax/PAGE_SIZE的值`shmmax/PAGE_SIZE=25769803776/4096=6291456`,
这样问题根本原因找到了,在当前环境,kernel.shmall的值至少应该被设置为6291456。 **总结:**Oracle部署过程中,还要对建议的系统参数值有一些深入的了解。有些官档建议的参数可能不符合实际情况,这时候可以结合系统主机的文档来综合定位问题。

Oracle启动报错ORA-27102解决的更多相关文章

  1. Oracle启动报错ORA-03113解决

    环境:RHEL6.4 + Oracle 11.2.0.4 步骤摘要:1.启动报错ORA-031132.查看alert日志查找原因3.根据实际情况采取合理的措施,这里我们先增加闪回区大小,把库启动起来4 ...

  2. ORA-01262,oracle启动报错,及Oracle启动原理

    错误状态: SQL> startup ORA-01261: Parameter db_recovery_file_dest destination string cannot be transl ...

  3. linux服务器启动报错UNEXPECTED INCONSISTENCY解决方法

    内网的linux服务器给开发员用来测试以及共享文件使用,今天早上发现xshell连接不上该服务器,一开始进入系统显示reboot and select proper boot device or in ...

  4. ORACLE启动报错ORA-03113: end-of-file on communication channel

    使用过程中发现oracle运行很慢(其实应该先关注空间问题),就准备关机重启一下,关不掉就强制关闭,然后启动就报错了. 1.SQL> startup ORACLE instance starte ...

  5. 内网服务器启动报错UNEXPECTED INCONSISTENCY解决方法

    一开始进入系统显示reboot and select proper boot device or insert boot media in selected boot device and press ...

  6. oracle 启动报错ORA-27125解决方案

    脚本: oracle@edwdb:~> id uid=(oracle) gid=(oinstall) (oinstall),(dba) oracle@edwdb:~> su - root ...

  7. oracle启动报ORA-03113;

    [案例] 在重启数据库过程中: SQL> startup ORACLE instance started. Total System Global Area 1.0489E+10 bytes F ...

  8. undo丢失恢复异常恢复,运维DBA反映Oracle数据库无法启动报错ORA-01157 ORA-01110,分析原因为Oracle数据库坏块导致

    本文转自 惜纷飞 大师. 模拟基表事务未提交数据库crash,undo丢失恢复异常恢复,运维DBA反映Oracle数据库无法启动报错ORA-01157 ORA-01110,分析原因为Oracle数据库 ...

  9. Oracle 12c报错:ORA-01078和LRM-00109的解决办法

    Oracle 12c报错:ORA-01078和LRM-00109的解决办法 2017-12-17 10:25:30 lemon_love1 阅读数 4336  收藏 更多 分类专栏: oracle   ...

随机推荐

  1. Odoo 报表中添加空格

    如果  不起作用,请用 代替.

  2. ZK 样式使用

    控件: <textbox id="usernameTb" sclass="login-user-input" placeholder="账号&q ...

  3. java并发编程(十七)内存操作总结

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17377197 主内存与工作内存 Java内存模型的主要目标是定义程序中各个变量的访问规则, ...

  4. CentOS6.5安装中文输入法

    首先进入命令形式的客户端 切换成root用户,输入命令"su root"即可,接着输入 yum install "@Chinese Support" 命令按en ...

  5. 2016/11/17 周四 <javascript的封装简单示例>

    这是一个简单的javascript代码封装的示例以及封装后的调用方法: var ticker={ n:0, add:function() { this.n++; }, show:function() ...

  6. SSH配置与讲解

    一.Struts 首先介绍Struts,在web项目中加入Struts的jar包,并在Web.xml中添加Struts的配置: <filter>       <filter-name ...

  7. 使用Aspose.Cells读取Excel

      最新更新请访问: http://denghejun.github.io Aspose.Cells读取Excel非常方便,以下是一个简单的实现读取和导出Excel的操作类: 以下是Aspose.Ce ...

  8. asp.net identity UserSecurityStamp 的作用

    UserSecurityStamp 主要是用来对用户安全相关信息做一个快照. 在使用asp.net identity 的 CreateAsync(TUser user) 创建一个用户的时候,如果开启了 ...

  9. .NET Core 构建配置文件从 project.json 到 .csproj

    从 .NET Core SDK 1.0 Preview 3 build 004056 开始,.NET Core 弃用 project.json,回归 .csproj,主要原因是为了兼容 MSBuild ...

  10. Hadoop学习笔记—16.Pig框架学习

    一.关于Pig:别以为猪不能干活 1.1 Pig的简介 Pig是一个基于Hadoop的大规模数据分析平台,它提供的SQL-LIKE语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换 ...