Oracle 安装报SGA size can not be greater than maximum shared memory segment size(0)

问题现象:

问题分析:

         从问题现象上来看可以比较清晰的看出是因为系统的内核参数调整问题,导致无法分配正确的内存给SGA;那么这种情况通常是由于我们的/etc/sysctl.conf中配置的内存信息和实际内存信息不符合导致。

 

我们的物理内存的大小为2G,swap内存的大小为4G;

[root@db01 ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          1893        428       1465          0         39        245
-/+ buffers/cache:        143       1749
Swap:         4063          0       4063

sysctl.conf信息如下:

kernel.shmall = 2147483648
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmmax = 8589934592
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 1048576
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
fs.file-max = 68157
fs.aio-max-nr = 1048576
vm.swappiness = 0
vm.dirty_background_ratio = 3
vm.dirty_ratio = 80
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
net.ipv4.tcp_sack = 0
net.ipv4.tcp_timestamps = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.tcp_wmem = 262144
net.ipv4.tcp_rmem = 4194304

 

首先我们对上面几个主要参数进行解释:

kernel.shmmax:

 

是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值。设置应该足够大,能在一个共享内存段下容纳下整个的SGA ,设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降。至于导致系统下降的主要原因为在实例启动以及ServerProcess创建的时候,多个小的共享内存段可能会导致当时轻微的系统性能的降低(在启动的时候需要去创建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响),但是其他时候都不会有影响。

 

官方建议值:

 

32位linux系统:可取最大值为4GB(4294967296bytes)-1byte,即4294967295。建议值为多于内存的一半,所以如果是32为系统,一般可取值为4294967295。32位系统对SGA大小有限制,所以SGA肯定可以包含在单个共享内存段中。

 

64位linux系统:可取的最大值为物理内存值-1byte,建议值为多于物理内存的一半,一般取值大于SGA_MAX_SIZE即可,可以取物理内存-1byte。例如,如果为12GB物理内存,可取12*1024*1024*1024-1=12884901887,SGA肯定会包含在单个共享内存段中。

 

kernel.shmall:

 

    该参数控制可以使用的共享内存的总页数。Linux共享内存页大小为4KB,共享内存段的大小都是共享内存页大小的整数倍。一个共享内存段的最大大小是16G,那么需要共享内存页数是16GB/4KB=16777216KB /4KB=4194304(页),也就是64Bit系统下16GB物理内存,设置kernel.shmall= 4194304才符合要求(几乎是原来设置2097152的两倍)。这时可以将shmmax参数调整到16G了,同时可以修改SGA_MAX_SIZE和SGA_TARGET为12G(您想设置的SGA最大大小,当然也可以是2G~14G等,还要协调PGA参数及OS等其他内存使用,不能设置太满,比如16G)

 

kernel.shmmni:

 

该参数是共享内存段的最大数量。shmmni缺省值4096,一般肯定是够用了。

 

fs.file-max:

 

该参数决定了系统中所允许的文件句柄最大数目,文件句柄设置代表linux系统中可以打开的文件的数量。

 

fs.aio-max-nr:

 

     此参数限制并发未完成的请求,应该设置避免I/O子系统故障。

 

kernel.sem:

 

以kernel.sem = 250 32000 100 128为例:

 

      250是参数semmsl的值,表示一个信号量集合中能够包含的信号量最大数目。

 

      32000是参数semmns的值,表示系统内可允许的信号量最大数目。

 

      100是参数semopm的值,表示单个semopm()调用在一个信号量集合上可以执行的操作数量。

 

      128是参数semmni的值,表示系统信号量集合总数。

 

net.ipv4.ip_local_port_range:

 

    表示应用程序可使用的IPv4端口范围。

 

net.core.rmem_default:

 

表示套接字接收缓冲区大小的缺省值。

 

net.core.rmem_max:

表示套接字接收缓冲区大小的最大值。

 

net.core.wmem_default:

表示套接字发送缓冲区大小的缺省值。

 

net.core.wmem_max:

表示套接字发送缓冲区大小的最大值。

 

         那么我们从上面的解释不难看出,导致该内存无法容纳sga的参数无非就是参数kernel.shmmax。
那么这个时候我们把其调整为和内存一样大即可:
kernel.shmmax = 2077155328  

时间: 2024-10-27 14:07:42

Oracle 安装报SGA size can not be greater than maximum shared memory segment size(0)的相关文章

启动Oracle实例报错ORA-27125解决办法

有一台CentOS的机器装了Oracle,启动实例的时候报错ORA-27125 SQL> startup ORA-27125: unable to create shared memory segment Linux-x86_64 Error: 1: Operation not permitted Linux详细版本为 # cat /proc/version Linux version 2.6.32-358.14.1.el6.x86_64 (mockbuild@c6b10.bsys.dev.ce

oracle-使用sql server数据库导出至Oracle数据库报错 !

问题描述 使用sql server数据库导出至Oracle数据库报错 ! 求助大神 解决方案 安装64为的oracle试试 解决方案二: 根据提示,你是不是用32bit的客户端用64bit运行了呢. 另外,system.data.oracleclient安装正确么?和你的服务器的版本匹配么?是不是版本过低. 解决方案三: SqlServer2012是64位的,Oracle数据库也是64位的 Oracle客户端是使用的PL/SQL 可能是32位的吧,有没有办法可以使他们版本或系统位数相互兼容的办法

Oracle 安装和卸载问题收集(集合篇)第1/6页_oracle

Oracle的系统要求 企业版:CPU 最低PENTIUM 200M 推荐 PENTIUMIII 1G以上 内存 最低128M 推荐 512M 硬盘空间 系统盘140M 安装盘4.5G(FAT32)或2.75G(NTFS) 标准版:CPU 最低PENTIUM 200M 推荐 PENTIUMIII 866以上 内存 最低128M 推荐 256M 硬盘空间 系统盘140M 安装盘4.5G(FAT32)或2.5G(NTFS) 个人版:CPU 最低PENTIUM 200M 推荐 PENTIUM 266以

plsql连接oracle数据库报ora 12154错误解决方法_oracle

plsql连接oracle数据库报ora 12154错误 今天遇到一个问题,使用sqlplus能够连接到远程的数据库,但是使用plsql却连接不上,报错"ORA-12154: TNS: 无法解析指定的连接标识符" 解决方法如下: 1.先检查服务器端的监听服务是否打开,如果没有打开请启动其监听 客户端:tnsping <tns_name> 服务器Linux下: #>lsnrctl status 查看监听状态 #>lsnrctl start 启动监听 2.通过Sql

Oracle安装

问题描述 oracle安装时总是报错不知是什么原因?还请大家多多指点! 问题补充:java.exe无法找到入口无法定位程序输入点GetProcessImageFileNameW于动态链接库PSAPI.DLL上 解决方案 看看C:WINDOWSsystem32是不是少了动态链接库PSAPI.DLL如果没有网上下个放进去解决方案二:oracle卸载一定要按照步骤来,否则的话卸载不干净就装不上了.解决方案三:你没装成功肯定要装一次啊,平时装得话有些小问题oracle数据库也是可以用的,但是有些功能使用

VMware中linux环境下oracle安装图文教程(一)_oracle

安装流程:前期准备工作--->安装ORACLE软件--->安装升级补丁--->安装odbc创建数据库--->安装监听器--->安装EM <前期准备工作> 安装配置系统环境 安装linux , 所有服务都不选择,只是选择安装开发工具,不要安装防火墙(当然也可以在后面关闭)打开终端,执行如下命令,检查安装包,没有的都要安装 make, glibc, libaiocompat-libstdc++, compat-gcc-34, compat-gcc-34-c++, gc

oracle内存结构:SGA的区域信息

http://www.itpub.net/471913.html SGA的区域信息 SGA(system global area)系统全局区跟一些必须的后台进程合进来称为实例(Instance).说它是全局区是包含了全局变量和数据结构,是系统区是包含了进入整个Oracle Instance的数据结构而不是特定的进程结构. SGA区域: SGA大概包括下面四到五种区域: The fixed area The variable area The database blocks area The lo

【Linux】将Oracle安装目录从根目录下迁移到逻辑卷

[Linux]将Oracle安装目录从根目录下迁移到逻辑卷   1.1  BLOG文档结构图     1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① Linux逻辑卷的创建和管理(重点) Tips: ① 本文在itpub(http://blog.itpub.net/26736162).博客园(http://www.cnblogs.com/lhrbest)和微信公众号(xiaomaim

ORACLE startup报错之ORA-01154&amp;&amp;ORA-01155&amp;&amp;ORA-01033&amp;&amp;ORA-03113

    今天,一实施同事求助,说一地市oracle数据库无法通过远程连接,连接报错如图: 操作系统:windows server2008 R2  数据库版本:oracle 11.2.0.1 初看报错貌似数据库正处在打开或关闭的过程中.查看告警日志,最近的一次数据库启动发生在上午10:50,部分告警日志如下: Wed Aug 02 10:51:48 2017 Starting ORACLE instance (normal) LICENSE_MAX_SESSION = 0 LICENSE_SESS