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!