Einbinden der Bibliothek St_shapelib unter

Werbung
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
Herunterladen