OS:Rhel -5.8- 64bit
Oracle version: oracle 10g-64bit
#uname -a
Linux test 2.6.32-300.10.1.el5uek #1 SMPWed Feb 22 17:37:40 EST 2012 x86_64 x86_64 x86_64 GNU/Linux
在使用dbca建库时包错
解决方法:注意用户为root
root@test ~]# id oracle10g
uid=610(oracle10g) gid=54321(oinstall)groups=54321(oinstall),54322(dba)
[root@test ~]# more/proc/sys/vm/hugetlb_shm_group
0
[root@test~]# echo 54322 > /proc/sys/vm/hugetlb_shm_group
[root@test ~]# more/proc/sys/vm/hugetlb_shm_group
54322
以下内容摘自:http://dotaddjj.itpub.net/post/43172/528658
ORA-27125: unable to create shared memory segment
无法分配创建共享内存段,这点开始以为是/etc/sysctl.conf中的设置问题,不过查看其实问题不在这儿。
正确的办法是修改/proc/sys/vm/hugetlb_shm_group中的记录
[root@server119 security]# id oracle
uid=500(oracle) gid=500(oinstall) groups=500(oinstall),501(dba)context=user_u:system_r:unconfined_t:s0
[root@server119 security]# more /proc/sys/vm/hugetlb_shm_group
0
[root@server119 security]# echo 501 > /proc/sys/vm/hugetlb_shm_group
[root@server119 security]# more /proc/sys/vm/hugetlb_shm_group
501
而后正常运行可以运行dbca建库。
摘要下Hugepage/Big page
系统进程是通过虚拟访问内存page table,那么cpu就需要将虚拟地址转换为物理内存地址ram+swap才能真正访问,cpu会缓存最近的虚拟内存地址和物理内存地址的映射关系(有点像lru list的管理),保存在由一个cpu维护的映射表中(linux在cpu申请固定大小buffer称为TLB用来管理page table),当然如果物理内存很大,越来越多的虚拟内存地址和物理地址被映射,当然对cpu检索还是会有一定的影响。
在linux环境下,内存都是以页 4kb的单位来定义的,如果要减少映射关系,需要使用大的内存页,相对来说hugepage也就是所谓的巨页内存,hugepage会一直keep在内存中,不会被交换出去,减少频繁的page in和page out,不能被其进程存占用,当使用大量物理内存的服务器时(8g下就建议使用hugepage),还是建议使用hugepage,对于oracle服务器来说,直接设置器hugepage pool等于sga即可。
可以通过如下方式查看Hugepage页的相关信息
[root@server119 security]# cat /proc/meminfo |grep Huge
HugePages_Total: 0 –Hugepage的页面数量
HugePages_Free: 0 --剩余的页面数量
HugePages_Rsvd: 0 --被分配预留但是没有使用的page数量
Hugepagesize: 2048 kB --Hugehuge的单个页面的大小
默认是没有开启Hugepage的。
Oracle 10g可以通过设置sysctl.conf的vm.nr_hugepages参数来启用hugepage,vm.nr_hugepages相当于普通页内存的参数kernel.shmall的功能。设置vm.nr_hugepages参数后重启系统。
[root@server119 security]# cat /proc/meminfo |grep Huge
HugePages_Total: 300 –Hugepage的页面数量
HugePages_Free: 20 --剩余的页面数量
HugePages_Rsvd: 0 --被分配预留但是没有使用的page数量
Hugepagesize: 2048 kB --Hugehuge的单个页面的大小
Oracle 11g由于启用amm管理,amm和hugepgae不兼容,需要先关闭amm特性,而后参照oracle 10g的pugepage设置。
问题补充:
摘自:http://yangtingkun.itpub.net/post/468/517086
Linux上数据库启动出现ORA-27125错误
===========================================================
作者:yangtingkun(http://yangtingkun.itpub.net)
发表于: 2011.04.27 23:59
分类: ORACLE , Bug
出处: http://yangtingkun.itpub.net/post/468/517086
---------------------------------------------------------------
帮客户解决一个Linux上数据库无法启动的问题。
客户的Linux 5.6 x86-64环境,安装数据库后,启动数据库报错:ORA-27125。Oracle文档上关于ORA-27125错误的描述为:
ORA-27125: unable to create shared memorysegment
Cause: shmget() call failed
Action: contact Oracle support
查询了一下,发现问题和linux上的hugetbl有关。
解决方法也很简单,首先检查oracle用户的组信息:
[oracle@yans1 ~]$ id oracle
uid=500(oracle) gid=502(oinstall) groups=502(oinstall),501(dba)
[oracle@yans1 ~]$ more /proc/sys/vm/hugetlb_shm_group
0
下面用root执行下面的命令,将dba组添加到系统内核中:
# echo 501 >/proc/sys/vm/hugetlb_shm_group
然后启动数据库,问题消失。
MOS问题搜索
ORA-27125 while creating the DB instance on Kernel 2.6 [ID 293988.1] |
转到底部 |
修改时间:2012-11-19类型:PROBLEM状态:PUBLISHED优先级:3 |
|
In this Document
Symptoms |
Cause |
Solution |
References |
Applies to:
Oracle Server - Enterprise Edition - Version 9.2.0.1 to10.2.0.1 [Release 9.2 to 10.2]
Linux x86
SUSE \ UnitedLinux x86-64
Linux x86-64
Linux Itanium
***Checked for relevance on 19-Nov-2012***
***Checked for relevance on 07-Jun-2010***
This Problem can be seen on the SUSE SLES9 linux distribution which runs onkernel '2.6.5-7.191'
Symptoms
While starting the database instancefollowing error is encountered.
SQL> startup
ORA-27125: unable to create shared memory segment
Linux Error: 1: Operation not permitted
Cause
This is caused by '2.6.5-7.nnn' kernelsrequiring MLOCK privilege for hugetlb memory.
Solution
To enable use of "hugetlb memory", or to allow the init.ora parameter"lock_sga=true" to be used, do:
--- Login as root
--- # echo 1 > /proc/sys/vm/disable_cap_mlock
If you need to make this change persistent
--- Login as root
--- Edit /etc/sysctl.conf
Add following lines
# Oracle requires MLOCK priviledge for hugetlb memory.
vm.disable_cap_mlock=1
--- Execute the command
#/etc/init.d/boot.sysctl start
Setting current sysctl status from /etc/sysctl.conf
vm.disable_cap_mlock = 1
--- Dont forget to enable the service.
chkconfig boot.sysctl on
References
BUG:4726024- GETTING ORA-27125 WHEN TRYING TO STARTUP INSTANCE
NOTE:317139.1- How to Configure SuSE SLES 9 / 10 32-bit for Very Large Memory with ramfs andHugePages