Skip to main content

Command Palette

Search for a command to run...

Suse Linux and ORA-27125

Published
2 min readView as Markdown

It's basically Unix, right, so you almost never reboot it. That's great, except when you can't remember what you did the last time to fix something. Well, I rebooted today. I didn't really need to, but something made me do it. Then I tried to bring up my database. I saw the following:

SQL> startup;
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORA-27125: unable to create shared memory segment
Linux-x86_64 Error: 1: Operation not permitted

What to do about it!? It turns out I had two distinct problems. That can be tough, because it looks like it could be one problem. Somehow the database OEM had introduced an old init.ora parameter, that's the ora-32004. If the db won't start, you don't get the output in the alert log telling you which parameter is the problem. First I solved the ora-27125, then I found that I had plsql_compiler_flags specified and reset it.

So, what caused the ora-27125? Would you believe... metalink had the answer, note: 293988.1

I'm going to paste the note here just so it is handy.

Applies to:

Oracle Server - Enterprise Edition - Version: 9.2 to 10.2
Linux Itanium
SUSE \ UnitedLinux x86-64
Linux x86-64
Linux x86
This Problem can be seen on the SUSE SLES9 linux distribution which runs on kernel '2.6.5-7.191'

Symptoms

While starting the database instance following 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' kernels requiring 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