SOFTWARE TIPPS UND S TRICK NR. 77 Einbinden der Bibliothek St_shapelib unter Oracle 12c Oracle 12 c Ab der Version 12 c kann man in Oracle mehrere Daten­ banken auf einer Datenbankinstanz parallel betreiben. Diese Datenbanken werden auch als „pluggable databases“ bezeichnet, die Datenbankinstanz wird als „multitenant“ („mandantenfähig“) bezeichnet. Versionen der St_shapelib Auf Windows hat die St_shapelib eine Version (siehe im Windows Explorer: mit rechter Maustaste auf die Eigenschaften der St_shapelib.dll und dort unter „Details“). Bei den Versionen 10.2.x und 10.3.x entspricht die SDE-Produktversion der Version von ArcGIS Server, bzw. ArcGIS Desktop. In der Version 10.4.x und 10.5 hingegen lautet die Produktversion der St_shapelib SDE 11.1. Die Datei­version für 10.4.1 ist 11.1.0.706. Für 10.5 lautet sie 11.1.0.1078. Oracle 11g In der Version Oracle 11 g gibt es noch keine „pluggable databases“. Dennoch ist die Vorgehensweise zum Einbinden der St_shapelib identisch mit derjenigen in der 12 c-Version. Im Gegensatz zu Oracle 12 c kann eben nur eine Datenbank pro Datenbankserver konfiguriert werden. Einbinden der St_shapelib Hierzu sind drei Schritte notwendig: Kopieren der St_shapelib Konfigurieren von extproc.ora Modifizieren des View „user_libraries“ im SDE-Schema Optional: Überprüfen der Konfiguration Wozu braucht man die St_shapelib Die St_shapelib wird ausschließlich für den Zugriff auf den ST_Geometry-Datentyp verwendet. Die Einbindung dieser Bibliothek ist optional. In früheren Versionen wurde die St_shapelib lediglich für den direkten Zugriff über SQL auf Daten mit dem ST_Geometry-Typ verwendet. Mittler­weile benötigt man die St_shapelib auch, wenn man mit Ab­frageLayern arbeitet. Insbesondere wird sie für Aktionen wie „Selektieren“ oder „Identifizieren“ in ArcMap innerhalb eines Abfrage-Layers genutzt. Bitte beachten Sie, dass Sie sich nach der Konfiguration der St_shapelib neu verbinden müssen, damit sie wirksam wird. Ein Klick auf „Verbindung trennen“ im Arc­Catalog Fenster ist dabei nicht ausreichend. Kopieren der St_shapelib Die St_shapelib muss in einen Ordner abgelegt werden, auf den der Oracle User (bzw. der User unter, dem der Oracle Listener läuft) Zugriff hat. Sie müssen beim Kopieren sicherstellen, dass die ArcGIS Desktop oder ArcGIS Server Version, von der die St_shapelib kopiert wird, der Version der Geodatabase entspricht. Sollten Sie die Bibliothek auf Linux oder Unix kopieren, so müssen Sie ein geeignetes Werkzeug zum Transferieren wählen, zum Beispiel FTP im „binären“ Modus. Siehe auch: http://arcg.is/2mrNJZo Wo finde ich die Bibliothek St_shapelib für Oracle Die Bibliothek St_shapelib ist nach der Installation von ArcGIS Desktop und ArcGIS Server automatisch verfügbar. Sie finden dort sowohl die Bibliotheken für Windows als auch für Linux und Unix. Die Dateien liegen in folgenden Ordnern: ArcGIS Desktop: < ArcGIS Desktop Installationsverzeichnis >\ ArcGIS \ Desktop < version >\ DatabaseSupport \ Oracle \ Windows64 Konfigurieren von extproc.ora Die extproc.ora-Datei liegt unter Windows standardmäßig im folgenden Verzeichnis: < Oracle Installationsverzeichnis>\ product \12.1.0 \ dbhome_1\ hs \ admin ArcGIS for Server on Windows: < ArcGIS Server Installationsverzeichnis >\ ArcGIS \ Server \ DatabaseSupport \ Oracle \ Windows64 Zum Editieren dieser Datei kann ein Text-Editor genutzt werden. Ein typischer Eintrag für die St_shapelib sieht wie folgt aus: SET EXTPROC_DLLS=ONLY:C: \\ mylibraries\\ mylib104 \\ st_shapelib.dll;C:\\ mylibraries\\ mylib1022 \\ st_shapelib.dll; C:\\ mylibraries\\ libst_raster_ora.dll ArcGIS for Server on Linux: < ArcGIS Server installation directory > / arcgis / server/ DatabaseSupport / oracle / linux64 D E N KE N 60 SOFTWARE Überprüfen der Konfiguration Um sicherzustellen, dass die St_shapelib korrekt eingebunden ist, eignen sich einfache Abfragen in SQL. Es werden dazu keine räumlichen Daten benötigt, für die Abfrage wird die Oracle-Tabelle „dual“ genutzt. Die St_shapelib kann mehrfach aufgeführt werden. Bitte beachten Sie, dass Sie im Pfad doppelte Backslashes verwenden müssen. Ein entsprechender Eintrag unter Linux oder Unix würde so aussehen: SET EXTPROC_DLLS=ONLY: / user / esrilibs / libst_ shapelib.so: / user / esrilibs2 / libst_shapelib.so: / user / esrilibs / libst_raster_ora.so Eine mögliche Abfrage ist: select sde.st_point (0,0,0) from dual; Das Ergebnis sieht in SQL Plus wie folgt aus: SQL > select sde.st_point (0,0,0) from dual; Bitte beachten Sie auch Folgendes: Unter Windows darf die dll zwar in einem Ordner mit Leerzeichen im Namen liegen (zum Beispiel „Program Files“). Bei der Angabe des Pfades in extproc.ora (und dem View „user_libraries“, siehe nächster Punkt) muss der Ordnername jedoch durch den Kurznamen ersetzt werden. Zum Beispiel sollte anstelle von „Program Files“ dann „PROGRA~1“ verwendet werden. Hierzu ein Tipp am Rande: Mit dem DOS-Befehl „dir /x“ können Sie sich in der Kommandozeile die Ordner und ihre Kurznamen anzeigen lassen. SDE.ST_POINT (0,0,0) (ENTITY, NUMPTS, MINX, MINY, MAXX, MAXY, MINZ, MAXZ, MINM, MA -------------------------------------------------------------------------------ST_POINT (1, 1, 0, 0, 0, 0, NULL, NULL, NULL, NULL, 0, 0, 0, ‚0C000000010000008080DD9DA4178080DD9DA417‘) Sollte die St_shapelib nicht ordnungsgemäß eingebunden sein, erhalten Sie eine Fehlermeldung wie zum Beispiel: Der View „user_libraries“ im Schema SDE Mit der Datei extproc.ora wird/werden der Datenbank­ instanz die St_shapelib-Bibliothek (en) bekannt gegeben. Durch die Einträge im View „user_libraries“ des User SDE wird jeder Datenbank genau eine St_shapelib zugeordnet. Eine Datenbankinstanz kann mehrere Datenbanken haben (pluggable databases). Pro Datenbankinstanz können mehrere St_shapelib-Dateien genutzt werden, pro Datenbank (pluggable database) darf allerdings nur eine St_shapelib konfiguriert sein. Der Eintrag im View „user_libraries“ muss auch in der Datei extproc.ora vorhanden sein. Um zu überprüfen, welcher Eintrag in „user_libraries“ vorhanden ist, eignet sich folgende Abfrage: SELECT file_spec FROM user_libraries WHERE library_ name = ‘ST_SHAPELIB‘; FEHLER in Zeile 1: ORA-06520: PL /SQL: Fehler beim Laden der externen Library ORA-06522: Unable to load DLL ORA-06512: in „SDE.ST_GEOMETRY_SHAPELIB_PKG“, Zeile 12 ORA-06512: in „SDE.ST_POINT“, Zeile 181 Weitere Information zu diesem Thema finden Sie auch unter: support.esri.com/technical-article/000011293 Es sei an dieser Stelle noch vermerkt, dass nicht alle räumlichen Abfragen zum Überprüfen der Konfiguration geeignet sind. Folgende Abfrage liefert zum Beispiel immer ein Ergebnis, auch wenn die St_shapelib nicht eingebunden ist: Um eine St_shapelib in „user_libraries“ einzutragen, können Sie folgendes Statement nutzen: CREATE or REPLACE LIBRARY ST_SHAPELIB AS ‘C: \mylibraries\st_shapelib.dll‘; select sde.st_area (shape) from sde.gdb_items; Bitte beachten Sie, dass nach dem PL/SQL-Code noch ein Schrägstrich (“/“) kommen muss, um das Statement auszuführen. Der Pfad muss natürlich Ihren Anforderungen angepasst werden. Weitere Informationen zur Konfiguration von extproc.ora und St_shapelib finden Sie unter: http://arcg.is/2mUjPZ4 Ralf Grüttner Esri Deutschland GmbH 61