Berechtigungsproblem nach Patch DBSW-12.1.0.2.170418 -> sh SQLPLUS -> libsqlplus.so: -> Permission denied

Berechtigungsproblem nach Patch

Nach Patch einer DB von 12.1.0.2.160419 auf 12.1.0.2.170418 lief ein Shellscript nicht mehr (SOLARIS 11).

Die Fehlermeldung lautete:

Oracle Corporation   SunOS 5.11   11.2 August 2015

ld.so.1: sqlplus: fatal: /u01/app/oracle/product/DB4711/12.1.0.2/lib/libsqlplus.so: Permission denied

 

Es wurden folgende Patches angewandt:

DBSW-12.1.0.2.170418
OJVM-12.1.0.2.170418
12.1.0.2.Datapump
DataPump-24592910

Im Log findet sich unter anderem folgende Sektion:

Patching component oracle.javavm.containers, 12.1.0.2.0…

OPatch found the word „warning“ in the stderr of the make command.
Please look at this stderr. You can re-run this make command.
Stderr output:
+ PATH=/bin:/usr/bin:/usr/ccs/bin
+ export PATH
+ lib=/u01/app/oracle/product/DB4711/12.1.0.2/sqlplus/lib/libsqlplus.so
+ makefile=/u01/app/oracle/product/DB4711/12.1.0.2/sqlplus/lib/ins_sqlplus.mk
+ so_ext=so
+ target=dlopenlib
+ basename /u01/app/oracle/product/DB4711/12.1.0.2/sqlplus/lib/libsqlplus.so .so
+ libname=libsqlplus
+ dirname /u01/app/oracle/product/DB4711/12.1.0.2/sqlplus/lib/libsqlplus.so
+ sodir=/u01/app/oracle/product/DB4711/12.1.0.2/sqlplus/lib
+ ardir=/u01/app/oracle/product/DB4711/12.1.0.2/lib/
+ [ var ‚=‘ dlopenlib ]
+ suffix=LIBS
+ var=“
+ [ ! -f /u01/app/oracle/product/DB4711/12.1.0.2/lib/libsqlplus.a ]
+ [ “ ‚!=‘ “ ]
+ make -f /u01/app/oracle/product/DB4711/12.1.0.2/sqlplus/lib/ins_sqlplus.mk dlopenlib _FULL_LIBNAME=/u01/app/oracle/product/DB4711/12.1.0.2/sqlplus/lib/libsqlplus.so _LIBNAME=libsqlplus _LIBDIR=/u01/app/oracle/product/DB4711/12.1.0.2/lib/ _LIBNAME_LIBS=’$(libsqlplusLIBS)‘ _LIBNAME_EXTRALIBS=’$(libsqlplusEXTRALIBS)‘
ld: warning: symbol ‚_init‘ not found, but .init section exists – possible link-edit without using the compiler driver
ld: warning: symbol ‚_fini‘ not found, but .fini section exists – possible link-edit without using the compiler driver

Composite patch 25171037 successfully applied.

Die Warnung ist eigentlich als zu ignorieren bekannt. Durch sie erfährt man aber von dem Abschnitt mit Makefile: das File wird neu gebaut, also entsteht es neu mit den vorgesehenen Defaultrechten. Damit liegt die Ursache auf der Hand:
Vorherige Dateirechte werden überschrieben unabhängig davon, ob jemand eingegriffen hatte, um die Rechte auf world read zu setzen, oder ob sie vorher auf Default standen.
Der Befehl
chmod 644 „Dateipfad/libsqlplus.so“
löst das Zugriffsproblem des Reports, jetzt kann „world“ wieder zugreifen.
Man kann das Ganze auch auf Oracle Metalink nachlesen unter diesen Stichworten:

Oracle Opatch failed with error code 73

Beim Patchen einer Datenbank kam unerwartet die Fehlermeldung:

opatch failed with error code 73

Vorarbeiten waren:

Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 – 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

Loading login.sql file…
SYS@DBASQL>shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@DBASQL>exit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 – 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
oracle_DBA@dbe16:~$> srvctl stop listener -l LISTENER_DBA

Der folgende Check auf die Prerequisites war erfolgreich:

oracle_DBA@dbe16:/stage/Oracle/SOLARIS/SPARC/12.1.0.2/patches/DBSW-12.1.0.2.170418/25171037$> $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./
Oracle Interim Patch Installer version 12.2.0.1.8
Copyright (c) 2017, Oracle Corporation. All rights reserved.

PREREQ session

Oracle Home : /u01/app/oracle/product/DBA/12.1.0.2
Central Inventory : /u01/app/oraInventory
from : /u01/app/oracle/product/DBA/12.1.0.2/oraInst.loc
OPatch version : 12.2.0.1.8
OUI version : 12.1.0.2.0
Log file location : /u01/app/oracle/product/DBA/12.1.0.2/cfgtoollogs/opatch/opatch2017-11-03_08-17-18AM_1.log

Invoking prereq „checkconflictagainstohwithdetail“

Prereq „checkConflictAgainstOHWithDetail“ passed.

OPatch succeeded.

Trotzdem gab es einen Fehler beim Anwenden des Patches:

oracle_DBA@dbe16:/stage/Oracle/SOLARIS/SPARC/12.1.0.2/patches/DBSW-12.1.0.2.170418/25171037$> $ORACLE_HOME/OPatch/opatch apply
Oracle Interim Patch Installer version 12.2.0.1.8
Copyright (c) 2017, Oracle Corporation. All rights reserved.

Oracle Home : /u01/app/oracle/product/DBA/12.1.0.2
Central Inventory : /u01/app/oraInventory
from : /u01/app/oracle/product/DBA/12.1.0.2/oraInst.loc
OPatch version : 12.2.0.1.8
OUI version : 12.1.0.2.0
Log file location : /u01/app/oracle/product/DBA/12.1.0.2/cfgtoollogs/opatch/opatch2017-11-03_08-20-27AM_1.log

Verifying environment and performing prerequisite checks…
Prerequisite check „CheckActiveFilesAndExecutables“ failed.
The details are:

Following executables are active :
/u01/app/oracle/product/DBA/12.1.0.2/lib/libclntsh.so.12.1
UtilSession failed: Prerequisite check „CheckActiveFilesAndExecutables“ failed.
Log file location: /u01/app/oracle/product/DBA/12.1.0.2/cfgtoollogs/opatch/opatch2017-11-03_08-20-27AM_1.log

OPatch failed with error code 73

Ermitteln des Prozesses:

$> fuser    /u01/app/oracle/product/DBA/12.1.0.2/lib/libclntsh.so.12.1
/u01/app/oracle/product/DBA/12.1.0.2/lib/libclntsh.so.12.1:   26298m

$> ps 26298
PID TT S TIME COMMAND
26298 ? S 0:00 /u01/app/oracle/product/DBA/12.1.0.2/bin/tnslsnr LISTEN

Es war der Listener. Obwohl dieser gestoppt war.

Nochmaliges Stoppen des Listeners und der „Opatch apply“ läuft ohne Probleme! Notfalls killen des Prozesses.

Im Alert fand sich übrigens auch eine Fehlermeldung:

ORA-12514: TNS:listener does not currently know of service requested in connect descriptor