Probleme mit Spatial Locator Datentyp nach Patching beheben

Seit Oracle am 5. Dezember 2019 Machine Learning und Spatial für alle Editionen kostenlos anbietet – siehe auch ML und Spatial werden kostenlos – und danach die Multimedia Option desupported hat – siehe Desupport of Oracle Multimedia Component in Oracle 19c (Doc ID 2555923.1) gibt es ein Problem, wenn nur der Spatial Locator genutzt wird.

Es treten nach einem Patching der Datenbank – abhängig davon, ob im Patch Änderungen am Spatial Locator und/oder dessen Packages enthalten sind – Fehler mit OCIINDEXUPDATE und/oder OCINDEXCREATE auf.

Laut Oracle ist die Lösung, der Datenbank die Spatial Option hinzuzufügen. Aus lizenztechnischen Gründen ist das OK, aber es erhöht den Security Footprint (es gibt immer wieder Security Lücken im Spatial Bereich) und es verlängert die Laufzeit von Patches und Upgrades.

Dabei ist die Lösung – der Workaround – relativ einfach. Man muss nur jene PLSQL Packages aktualisieren, die für den Spatial Locator Datentyp benötigt werden:

alter session set current_schema=MDSYS;
@?/md/admin/sdoutlh.sql
@?/md/admin/sdoutlb.plb
@?/md/admin/prvtsidx.plb
alter session set current_schema=SYS;
@?/rdbms/admin/utlrp

Da meist nur wenige Objekte recompiliert werden müssen, dauert das Einspielen nur wenige Sekunden. Im Fall von Multitenant Datenbanken kann man dies auch mittels catcon.pl für alle PDBs durchführen. Einfach die SQL Statements in ein SQL-Script – hier im Beispiel locator.sql genannt – im Verzeichnis /home/oracle ablegen und folgenden Aufruf durchführen:

$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl \
        -d /home/oracle -l /home/oracle -b locator_log locator.sql

Hinweis: sollte das Schema MDSYS nicht in allen PDBs vorhanden sein, muss man entsprechend die CDB und die notwendigen PDBs beim Catcon mitgeben.

Voraussichtlich wird dies auch mit Oracle 23ai funktionieren, allerdings gibt es im Moment noch keine on-Premise Version und passende RUs, um dies zu verifizieren.