My friend told me his team installed Oracle 11.2.0.4 on a new SLES12 system while could not create the database, even could not use the sqlplus.
SLES is also a famous Linux distribution, so I thought Oracle could run on it well, then I installed a test VM and tried to duplicate this issue while failed. In other words, I could run the same OS and DB on my VM really well.
While my friend still got the error:
$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Fri Aug 4 23:02:08 2017 Copyright (c) 1982, 2013, Oracle. All rights reserved. ERROR: ORA-12547: TNS:lost contact
I did some search and we corrected some limits settings, while still failed to run the sqlplus.
From the alert log file, we got below error messages:
Process PMON died, see its trace file USER (ospid: 3349): terminating the instance due to error 443 Instance terminated by USER, pid = 3349 Sat Nov 18 20:58:11 2017 Exception [type: SIGSEGV, SI_KERNEL(general_protection)] [ADDR:0x0] [PC:0x7F63194DC4A0, __lll_unlock_elision()+48] [flags: 0x0, count: 1]
Through the stack call, we got notes id 2297117.1, and found the root cause of this issue:
glibc in SuSE 12 makes use of a Hardware Lock Elision (HLE) available in newer Intel Processors. This can cause process crash on call stack "__lll_unlock_elision"
And the solution:
- Modify the "/etc/ld.so.conf" adding "/lib64/noelision" as the FIRST entry. It should look similar to the following:
/lib64/noelision /usr/local/lib64 /usr/local/lib include /etc/ld.so.conf.d/*.conf # /lib64, /lib, /usr/lib64 and /usr/lib gets added # automatically by ldconfig after parsing this file. # So, they do not need to be listed.
- Create a link in $ORACLE_HOME/lib for the noelision version of the libpthread library: (please replace with your own one)
su - oracle ln -s /lib64/noelision/libpthread-<x.xx>.so $ORACLE_HOME/lib/libpthread.so.0
- Re-logon oracle and see if the sqlplus works.
su - oracle ldd $ORACLE_HOME/bin/sqlplus ldd $ORACLE_HOME/bin/oracle sqlplus / as sysdba
And it did work!