SQL> startup
ORA-27126: unable to lock shared memory segment in core
IBM AIX RISC System/6000 Error: 1: Not owner
看起来像是权限问题,但是即使给Oracle用户加system组也没有用。后来Oracle解释说需要给Oracle用户赋予两个capability:CAP_BYPASS_RAC_VMM和CAP_PROPAGATE,但这两个capabilities是采用大页内存时才需要设置的,这样说10.2.0.4如果lock_sga的话,默认是要采用大页内存的。当然,大页内存的使用还需要os上设置相关参数的,如果os没有设置,oracle还是要采用4k的内存页。
#chuser capabilities=CAP_BYPASS_RAC_VMM,CAP_PROPAGATE oracle
#lsuser -a capabilities oracle
oracle capabilities=CAP_BYPASS_RAC_VMM,CAP_PROPAGATE
今天在给用户做一个imp导入性能调整的时候遇到以下问题,记录如下aix 5300-07oracle 10204当lock_sga=true时SQL> conn /as sysdbaConnected to an idle instance.SQL> STARTUP UPGRADEORA-27126: unable to lock shared memory segment in coreIBM AIX RISC System/6000 Error:
1: Not owner产生问题的原因是oracle 10204在lock_sga=true时采用大页内存的管理方式需要修改操作系统参数
1、#chuser capabilities=CAP_BYPASS_RAC_VMM,CAP_PROPAGATE oracle
2、计算页数num_of_large_pages = INT((total_SGA_size-1)/16MB)+13、
vmo -p -o lgpg_regions=num_of_large_pages -o lgpg_size=16777216
如果操作系统不修改大页内存的参数设置,那么oracle也将会按照以前4k来进行处理,那么lock_sga=true也不会启动成功,修改后重启数据库就不会有问题
----------------------------------------------------------------------
AIX上设置LOCK_SGA=TRUE
在aix平台上该参数要结合os的v_pinshm参数一同使用。
v_pinshm参数的设置可以通过vmo 命令来实现。
查看vmo 参数的设置
# vmo -a |grep pinshm
v_pinshm = 0
Metalink上给出修改参考三步骤:
1.$ /usr/sbin/vmo -r -o v_pinshm=1
2.$ /usr/sbin/vmo -r -o maxpin%=percent_of_real_memory
percent_of_real_memory = ((size of SGA / size of physical memory) *100) + 3
3.Set LOCK_SGA parameter to TRUE in the init.ora .
----------------------------------------------------------------------
version:10.2.0.4.0
1.#/usr/sbin/vmo -p -o v_pinshm=1
2.#/usr/sbin/vmo -p -o maxpin%=80
3.#chuser capabilities=CAP_BYPASS_RAC_VMM,CAP_PROPAGATE,CAP_NUMA_ATTACH oracle
4.#lsuser -a capabilities oracle
5.SQL> alter system set pre_page_sga=true scope=spfile;
SQL> alter system set lock_sga=true scope=spfile;
6.重启服务器。
7.启动数据库实例。
---------------------------------------------------------------------------------
数lock_sga导致数据无法正常启动
修改数据库的初始化参数lock_sga为true之后,发现启动数据的时候提示错误
:
ORA-27125: unable to create shared memory segment
HPUX-ia Error: 1: Not owner
操作系统HP-UX B.11.31 U ia
数据库版本:Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - bi
检查OS的shmmax等核心参数,设置都满足oracle安装手册要求的。
恢复该参数为false后数据库能正常启动。
参考后发现该参数需要对OS有适当设置才能使用,如【以下参考csdn上资料】:
lock_sga = true 的问题
由于几乎所有的操作系统都支持虚拟内存,所以即使我们使用的内存小于物理内存,也不能避免操作系统将SGA 换到虚拟内存(SWAP)。所以我们可以尝试使得SGA 锁定在物理内存中不被换到虚拟内存中,这样减少页面的换入和换出,从而提高性能。但在这里遗憾的是,windows 是无法避免这种情况的。下面我们来参考在不同的几个系统下怎么实现lock_sga
AIX 5L(AIX 4.3.3 以上)
logon aix as root
cd /usr/samples/kernel
./vmtune (信息如下) v_pingshm已经是1
./vmtune -S 1
然后oracle用户修改initSID.ora 中 lock_sga = true
重新启动数据库
HP UNIX
Root身份登陆
Create the file "/etc/privgroup": vi /etc/privgroup
Add line "dba MLOCK" to file
As root, run the command "/etc/setprivgrp -f /etc/privgroup":
$/etc/setprivgrp -f /etc/privgroup
oracle用户修改initSID.ora中lock_sga=true
重新启动数据库
SOLARIS (solaris2.6以上)
8i版本以上数据库默认使用隐藏参数 use_ism = true ,自动锁定SGA于内存中,不用设置lock_sga, 如果设置 lock_sga =true 使用非 root 用户启动数据库将返回错误。
WINDOWS
不能设置lock_sga=true,可以通过设置pre_page_sga=true,使得数据库启动的时候就把所有内存页装载,这样可能起到一定的作用。