Doc ID 2297117.1
On : 11.2.0.4 version, RDBMS, SUSE 12 platform:
1. "sqlplus / as sysdba" reports ORA-12547:
$ 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
2. Strace shows below error:
15069 0.000019 munmap(0x7ff21311f000, 268435456) = 0 <0.000010>
15069 0.000024 --- SIGSEGV {si_signo=SIGSEGV, si_code=SI_KERNEL, si_addr=0} ---
15068 0.000293 <... read resumed> "", 64) = 0 <0.010658>
15069 0.000024 +++ killed by SIGSEGV +++
15068 0.000005 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_KILLED, si_pid=15069, si_uid=300, si_status=SIGSEGV, si_utime=0, si_stime=0} ---
3. ora-7445 [__lll_unlock_elision] raised if attempting to startup the database:
Alert log:
Process PMON died, see its trace file
USER (ospid: 3075): terminating the instance due to error 443
Instance terminated by USER, pid = 3075
Tue Aug 08 01:43:12 2017
Exception [type: SIGSEGV, SI_KERNEL(general_protection)] [ADDR:0x0] [PC:0x7F11DF21C490, __lll_unlock_elision()+48] [flags: 0x0, count: 1]
Trace File:
*** 2017-08-08 01:43:12.268
Exception [type: SIGSEGV, SI_KERNEL(general_protection)] [ADDR:0x0] [PC:0x7F11DF21C490, __lll_unlock_elision()+48] [flags: 0x0, count: 1]
DDE: Flood control is not active
========= Dump for critical error (no incident) (ORA 7445 [__lll_unlock_elision()+48]) ========
Registers:
%rax: 0x0000000000000000 %rbx: 0x0000000000048006 %rcx: 0x000000000000001e
%rdx: 0x000000000c1c2e88 %rdi: 0x000000000c1c2e88 %rsi: 0x0000000000000000
%rsp: 0x00007ffc48934788 %rbp: 0x00007ffc48934790 %r8: 0x0000000000000000
%r9: 0x00000000bfffffff %r10: 0x0000000008000000 %r11: 0x0000000000000202
%r12: 0x000000000c195340 %r13: 0x00007ffc48934a38 %r14: 0x0000000010000000
%r15: 0x00007f11de6015e8 %rip: 0x00007f11df21c490 ïl: 0x0000000000010246
__lll_unlock_elision()+29 (0x7f11df21c47d) add $0x80,%rsp
__lll_unlock_elision()+36 (0x7f11df21c484) xor êx,êx
__lll_unlock_elision()+38 (0x7f11df21c486) ret
__lll_unlock_elision()+39 (0x7f11df21c487) nopw 0x0(%rax,%rax)
> __lll_unlock_elision()+48 (0x7f11df21c490) lgdt %bp
__lll_unlock_elision()+51 (0x7f11df21c493) xor êx,êx
__lll_unlock_elision()+53 (0x7f11df21c495) ret
__lll_unlock_elision()+54 (0x7f11df21c496) cs: nopw 0x0(%rax,%rax)
__lll_unlock_elision()+64 (0x7f11df21c4a0) movzwl (%rsi),êx
----- Call Stack Trace -----
skdstdst <- ksedst1 <- ksedst <- dbkedDefDump <- ksedmp
<- ssexhd <- sighandler <- lll_unlock_elisio <- sltsimr <- sskgmdt
<- skgmdtmany <- skgmdetach0 <- skgmdetach <- ksmdsgi <- ksmdsg
<- ksuabt <- opistr_real <- opistr <- opiodr <- ttcpip
<- opitsk <- opiino <- opiodr <- opidrv <- sou2o
<- opimai_real <- ssthrdmain <- main <- libc_start_main <- start
4. "dbca" will also fail with above error.
CHANGES
This is a new installed 11.2.0.4 on SUSE 12.
CAUSE
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"
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. Restart the host and then re-logon oracle and see if the sqlplus works.
su - oracle
ldd $ORACLE_HOME/bin/sqlplus
ldd $ORACLE_HOME/bin/oracle
sqlplus / as sysdba
Note: The solution can also be applied on GRID/ASM home if ora-12547 reports on SUSE12 while connecting the ASM instance by sqlplus. please also refer to Note: 2253054.1 for more details.