Beim Upgrade von Oracle Datenbanken sollte man beachten, dass hierfür eine Abhängigkeit zum AIX Service „iocp“ bedient werden muss. Ansonsten starten zum Beispiel listener, sqlplus oder auch abhängige Scripte wie mopatch nicht (da diese ebenfalls sqlplus nutzen).
So meldet sich sqlplus zum Beispiel mit dem folgenden Fehler und verweigert die Arbeit – Pfade und Environment stimmen natürlich 🙂
sapserver:orasap 29> ./sqlplus Could not load program sqlplus: rtld: 0712-001 Symbol CreateIoCompletionPort was referenced from module /oracle/SAP/121/lib/libttsh12.so(), but a runtime definition of the symbol was not found. rtld: 0712-001 Symbol GetMultipleCompletionStatus was referenced from module /oracle/SAP/121/lib/libttsh12.so(), but a runtime definition of the symbol was not found. rtld: 0712-002 fatal error: exiting. sapserver:orasap 30> ldd sqlplus sqlplus needs: /oracle/SAP/121/lib/libsqlplus.so /usr/lib/libc.a(shr_64.o) /usr/lib/libpthreads.a(shr_xpg5_64.o) /unix /oracle/SAP/121/lib/libttsh12.so /usr/lib/libcrypt.a(shr_64.o) /oracle/SAP/121/lib/libons.so /usr/lib/libdl.a(shr_64.o) /usr/lib/libc.a(aio_64.o) /usr/lib/libodm.a(shr_64.o) /usr/lib/libperfstat.a(shr_64.o) /usr/lib/libcfg.a(shr_64.o) /usr/lib/liblvm.a(shr_64.o) /usr/lib/libcorcfg.a(shr_64.o) /usr/lib/libsrc.a(shr_64.o) sapserver:orasap 31>
Bei dem Aufruf von mopatch äußert sich das ganze verwirrender weise sogar so:
sapserver:orasap 48> env ORACLE_HOME=$IHRDBMS $IHRDBMS/MOPatch/mopatch.sh -v -s SAP12102P_1511-20012297.ZIP Cannot determine Oracle RDBMS version.
Ursache hierfür ist auch wieder das sqlplus bzw. die im mopatch Script genutzte Abfrage:
# explicitly set that if LD_LIBRARY_PATH="$ORACLE_HOME/lib" \ SHLIB_PATH="$ORACLE_HOME/lib" \ LIBPATH="$ORACLE_HOME/lib" \ "$ORACLE_HOME/bin/sqlplus" -v 1>"$l_5_12_rdbmsverlog" 2>&3; then l_5_12_rdbmsver=`( egrep "$RDBMSVERRE" "$l_5_12_rdbmsverlog" 2>&3 || : ) | sed 's/'"$RDBMSVER10SE"'/\1/;s/'"$RDBMSVER11SE"'/\1/' 2>&3` if versionp "$l_5_12_rdbmsver"; then : else logerr -q "Cannot determine Oracle RDBMS version from \"$l_5_12_rdbmsver\"." echo "" return 1 fi else logerr -q "Cannot execute SQL*Plus to determine Oracle RDBMS version." echo "" return 1 fi
Bedingt durch den fehlgeschlagenen Aufruf von sqlplus kommt das Script mit der nicht ganz passenden Fehlermeldung zurück, es könne das verwendete RDBMS nicht erkennen. Den eigentlichen Fehler, nämlich sqlplus nicht starten zu können unterschlägt es einfach mal.
Schuld an dem Verhalten ist der nicht aktivierte iocp Service von AIX. Das kann man jedoch ganz einfach prüfen (und den Service online aktivieren). Zunächst die Installationspakete prüfen und sehen, ob der Service überhaupt installiert ist:
sapserver:orasap 34> lslpp -l bos.iocp.rte Fileset Level State Description ---------------------------------------------------------------------------- Path: /usr/lib/objrepos bos.iocp.rte 6.1.9.0 COMMITTED I/O Completion Ports API Path: /etc/objrepos bos.iocp.rte 6.1.4.0 COMMITTED I/O Completion Ports API sapserver:orasap 35>
Das sieht schon mal gut aus. Als nächstes wird geprüft ob der Service aktiviert ist:
sapserver:orasap 35> lsdev -Cc iocp iocp0 Defined I/O Completion Ports sapserver:orasap 36>
Das Defined Flag gibt hier lediglich an, dass der Service vorhanden ist, aber eben nicht gestartet. Nachdem der Service aktiviert ist sieht die Ausgabe so aus:
sapserver:orasap 37> lsdev -Cc iocp lsdev | grep iocp iocp0 Available I/O Completion Ports sapserver:orasap 38>
Das Available Flag zeigt an, dass der Service nicht nur installiert, sondern auch aktiviert ist. Somit läuft nun auch Oracle 12 unter AIX. Mehr Informationen hierzu gibt es in der SAP Note #1915299