# Suse Linux and ORA-27125

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
