ORA-12547 on SUSE12/SLES12

  • A+
Categories:Oracle

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:

  1. 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.
  2. 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
  3. 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!

 

 

Comment

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: