My friend told me his team installed Oracle 126.96.36.199 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 188.8.131.52.0 Production on Fri Aug 4 23:02:08 2017
Copyright (c) 1982, 2013, Oracle. All rights reserved.
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:1234567/lib64/noelision/usr/local/lib64/usr/local/libinclude /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)12su - oracleln -s /lib64/noelision/libpthread-<x.xx>.so $ORACLE_HOME/lib/libpthread.so.0
- Re-logon oracle and see if the sqlplus works.1234su - oracleldd $ORACLE_HOME/bin/sqlplusldd $ORACLE_HOME/bin/oraclesqlplus / as sysdba
And it did work!