环境: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. Python之路Day20-Django一对一(多)以及Ajax

    上节内容回顾 问题一:Django请求生命周期 -> URL对应关系(匹配) -> 视图函数 -> 返回用户字符串-> URL对应关系(匹配) -> 视图函数 -> ...

  2. Java虚拟机

    虚拟机每次方法的调用和返回都伴随着栈帧的入栈和出栈,而每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用(表明该栈帧执行的是哪个方法),持有这个引用是为了支持方法调用中的动态连接.这些符号引用中 ...

  3. SQL Server2008附加数据库之后显示为只读时解决方法

    啰嗦的话就不多说了,直入主题吧! 方案一: 碰到这中情况一般是使用的sa账户登录的,只要改为Windows身份验证,再附加数据库即可搞定. 方案二: 使用sa登录SQL Server2008附加数据库 ...

  4. Unity_UGUI知识点思维导图

    转自 http://blog.csdn.net/qq_34134078/article/details/51772568 个人总结的UGUI学习知识要点思维导图,四张部分图及最后一张整体图 1.UI基 ...

  5. Information Management Policy(信息管理策略)的使用范例

    基础知识 很多人都会定期收拾自己的书架或者抽屉,把里面过旧的资料拿走,为新的资料腾出空间来,这样既可以节省空间,而且当冗余资料过多的时候也会降低你查找的速度和效率.那么,在企业的SharePoint中 ...

  6. 在java中如何用键盘输入一个数,字符,字符串

    一,利用 Scanner 实现从键盘读入integer或float 型数据 import java.util.*; public class test { public static void mai ...

  7. Jmeter之参数化

    Jmeter参数化分为两类,一类是在badboy录制脚本时进行参数化,二是再Jmeter里进行参数化 一:badboy录制脚本时进行参数化的步骤 1.脚本录制成功后->在左下角,点击variab ...

  8. The Myths about Transactions (ACID) and NoSQL

    There has been widespread characterization of one of the major distinctions between NoSQL and tradit ...

  9. 【php爬虫】百万级别知乎用户数据爬取与分析

    代码托管地址:https://github.com/hoohack/zhihuSpider 这次抓取了110万的用户数据,数据分析结果如下: 开发前的准备 安装Linux系统(Ubuntu14.04) ...

  10. C#+OpenGL+FreeType显示3D文字(1) - 从TTF文件导出字形贴图

    C#+OpenGL+FreeType显示3D文字(1) - 从TTF文件导出字形贴图 +BIT祝威+悄悄在此留下版了个权的信息说: 最近需要用OpenGL绘制文字,这是个很费时费力的事.一般的思路就是 ...