Die SQL-Funktionen für "ST_Geometry" in Oracle verwenden eine gemeinsame Bibliothek, auf die Oracle über den externen Prozedur-Agenten "extproc" von Oracle zugreift. Oracle muss auf die Datei der physikalischen Bibliothek zugreifen können, damit Sie die folgenden Schritte ausführen können:
- Ausführen der SQL-Funktionen für "ST_Geometry" über SQL-Clients
- Definieren eines Abfrage-Layers in ArcMap oder ArcGIS Pro, der SQL-Funktionen in "ST_Geometry"-Spalten ausführt
- Abfragen von Feature-Layern mit Abschnitten in ArcGIS Pro
- Veröffentlichen eines Web-Layers, der auf Daten in der Oracle-Datenbank verweist
- Führen Sie das Geoverarbeitungswerkzeug Layer lagebezogen auswählen mit der Option Überschneiden (DBMS) aus.
Sie müssen das externe Prozedur-Framework von Oracle so konfigurieren, dass die "ST_Geometry"-Bibliothek ST_SHAPELIB aufgerufen wird, um die oben genannten Tasks auszuführen.
Vorbereitungsschritte
Die "ST_Geometry"-Bibliothek wurde für bestimmte Betriebssysteme erstellt. Sie können die Datei aus einer ArcGIS Server-Installation kopieren oder von My Esri herunterladen.
Die Bibliotheken werden mit ArcGIS Server in folgenden Verzeichnissen installiert:
- <ArcGIS Server installation directory>\ArcGIS\Server\DatabaseSupport\Oracle\Windows64\st_shapelib.dll
- <ArcGIS Server installation directory>/arcgis/server/DatabaseSupport/oracle/linux64/libst_shapelib.so
- <ArcGIS Server installation directory>/arcgis/server/DatabaseSupport/oracle/ibmaix64/libst_shapelib.so
- <ArcGIS Server installation directory>/arcgis/server/DatabaseSupport/oracle/sunos64/libst_shapelib.so
Die Oracle-Instanz muss auf die "ST_Geometry"-Bibliothek zugreifen können. Legen Sie die Bibliothek in einem Verzeichnis auf dem Oracle-Computer ab, auf das die Instanz zugreifen kann. Wenn ArcGIS Server und Oracle auf demselben Computer installiert sind, konfigurieren Sie die Datei extproc.ora so, dass sie auf die Datei im ArcGIS Server-Installationsverzeichnis verweist.
Hinweis:
Wurde die Datei extproc.ora so konfiguriert, dass sie auf die Datei im ArcGIS Server-Installationsverzeichnis verweist, können Sie die folgenden Vorbereitungsschritte überspringen. Das Ausführen von ArcGIS Server und Oracle auf demselben Computer kann jedoch zu einem Ressourcen-Konkurrenzbetrieb und damit zu Performance-Problemen führen.
Führen Sie die folgenden Schritte aus, bevor Sie die Datei "extproc" von Oracle konfigurieren:
- Wenn die Oracle-Instanz keinen Zugriff auf die oben genannten Installationsverzeichnisse von ArcGIS Server hat, laden Sie die Bibliothek "ST_Geometry" von My Esri herunter, oder kopieren Sie sie vom ArcGIS Server-Computer in ein Verzeichnis auf dem Oracle-Computer.
Hinweis:
Stellen Sie sicher, dass Sie die richtige Bibliothek für das Oracle-Betriebssystem herunterladen oder kopieren.
Bei der Bereitstellung auf einem Microsoft Windows-Server wird für die Bibliothek "ST_Geometry" das Microsoft Visual C++ Redistributable Package (x64) benötigt. Informationen zur erforderlichen Paketversion finden Sie unter Oracle-Datenbankanforderungen. Wenn dieses Paket auf dem Oracle-Server nicht verfügbar ist, laden Sie es von der Microsoft-Site herunter, und installieren Sie es.
- Stellen Sie von einem SQL-Client eine Verbindung als SDE-Benutzer mit der Oracle-Instanz her, und führen Sie den folgenden SQL-Befehl aus, um sich zu vergewissern, dass der vom Werkzeug festgelegte Pfad mit dem Speicherort der "ST_Geometry"-Bibliothek übereinstimmt:
SELECT file_spec FROM user_libraries WHERE library_name = 'ST_SHAPELIB';
Wenn der dabei zurückgegebene Pfad nicht mit dem Speicherort der Bibliotheksdatei "ST_Geometry" übereinstimmt, müssen Sie die Bibliothek neu erstellen, nachdem Sie die Datei "extproc" konfiguriert haben.
Konfigurieren von "extproc"
Konfigurieren Sie die Oracle-Datei "extproc.ora" so, dass sie auf den Speicherort der Bibliotheksdatei "ST_Geometry" verweist.
- Erstellen Sie eine Sicherung der Datei extproc.ora auf dem Oracle-Server.
- Öffnen Sie die Datei "extproc.ora" in einen Texteditor, und ändern Sie sie so, dass sie auf den Speicherort der Bibliothek "st_shapelib.dll" (Windows) oder der Bibliothek "libst_shapelib.so" (Linux oder UNIX) verweist.
In diesem Beispiel ist kein ArcGIS-Client auf dem Oracle Windows-Server installiert, sodass die Datei st_shapelib.dll auf dem Oracle-Computer in ein Verzeichnis namens mylibraries kopiert wurde. Die folgende Zeile wird der Datei "extproc.ora" hinzugefügt, um auf die Bibliothek "ST_Geometry" in diesem Verzeichnis zu verweisen:
SET EXTPROC_DLLS=ONLY:C:\\mylibraries\\st_shapelib.dll
In diesem Beispiel auf einem Linux- oder UNIX-Server wird die folgende Zeile hinzugefügt, die auf die Bibliothek "ST_Geometry" im Verzeichnis "esrilibs" des Benutzers verweist. Dieses wurde auf dem Oracle-Server erstellt, um die Bibliothek zu speichern:
SET EXTPROC_DLLS=ONLY:/user/esrilibs/libst_shapelib.so
- Speichern und schließen Sie die extproc.ora-Datei.
Sie müssen die Oracle-Instanz möglicherweise neu starten, damit die Änderungen in der Datei extproc.ora identifiziert werden.
- Wenn Sie den Speicherort der Bibliothek "ST_Geometry" vom Standardverzeichnis geändert haben oder kein Speicherort festgelegt wurde, erstellen Sie die Bibliothek "ST_SHAPELIB" in der Oracle-Datenbank.
Sie müssen als SDE-Benutzer eine Verbindung zur Datenbank herstellen, um die Bibliothek "ST_Geometry" erstellen bzw. neu erstellen zu können.
In diesem Beispiel ist die Bibliothek "ST_SHAPELIB" auf das Verzeichnis "mylibraries" eines Oracle-Servers für Windows festgelegt, auf dem die Datei "st_shapelib.dll" abgelegt wurde.
CREATE or REPLACE LIBRARY ST_SHAPELIB AS 'C:\mylibraries\st_shapelib.dll';
- Wenn Sie die Bibliothek neu erstellt haben, müssen Sie das Paket "sde.st_geometry_shapelib_pkg" neu kompilieren.
ALTER PACKAGE sde.st_geometry_shapelib_pkg COMPILE REUSE SETTINGS;
Alle Clients, die Zugriff auf die Bibliothek benötigen (einschließlich Web-Services), müssen erneut eine Verbindung mit der Datenbank herstellen.
Überprüfen der "extproc"-Konfiguration
Sie können die "ST_Geometry"-Bibliothek abfragen, um sicherzustellen, dass "extproc" darauf zugreifen kann.
- Melden Sie sich bei einem Oracle-SQL-Client an.
- Führen Sie die folgende Abfrage aus:
SELECT sde.ST_AsText(SDE.ST_Geometry('POINT (10 10)', 0)) FROM dual;
Wenn "extproc" ordnungsgemäß konfiguriert wurde, gibt die Abfrage Folgendes zurück:
SDE.ST_ASTEXT(SDE.ST_GEOMETRY('POINT(1010)',0)) -------------------------------------------------------------------------------- POINT ( 10.00000000 10.00000000)
Wurde "extproc" nicht ordnungsgemäß konfiguriert, können eine oder mehrere der folgenden Fehlermeldungen angezeigt werden:
ORA-06520: PL/SQL: Fehler beim Laden der externen Bibliothek
ORA-06522: DLL konnte nicht geladen werden
ORA-06512: at "SDE.ST_GEOMETRY_SHAPELIB_PKG", line 0
ORA-06512: at "SDE.ST_GEOMETRY_OPERATORS", line 68
Upgrades und die "ST_Geometry"-Bibliothek
Wenn Sie auf das ArcGIS Server-Installationsverzeichnis verweisen, erhalten Sie aktualisierte Bibliotheken, wenn Sie eine neue Version von ArcGIS Server installieren. Falls Sie die Bibliotheken an einem anderen Speicherort ablegen, müssen Sie neue Versionen der Bibliotheksdatei herunterladen oder kopieren, um die in den neuen Versionen der Bibliothek enthaltenen Korrekturen und Verbesserungen zu erhalten.
Oracle kennzeichnet die Bibliothek möglicherweise als ungültig, wenn sie ersetzt oder die Oracle-Instanz aktualisiert wurde. Manchmal kompiliert Oracle ungültige Datenbankobjekte automatisch neu, wenn die Objekte von einem Client referenziert werden. Es kann aber auch vorkommen, dass sie nicht automatisch kompiliert werden.
Die "ST_Geometry"-Bibliothek befindet sich im Besitz des SDE-Benutzers. Um den Status der Bibliothek (und aller Dateien im Besitz des SDE-Benutzers) zu überprüfen, melden Sie sich als SDE-Benutzer bei einem SQL-Client an, und führen Sie die folgende Anweisung aus:
SELECT object_name, object_type
FROM USER_OBJECTS
WHERE STATUS = 'INVALID';
Wenn der Paketkörper sde.st_geometry_shapelib_pkg in der Liste der ungültigen Objekte zurückgegeben wird, kompilieren Sie ihn wie in Schritt 5 des Abschnitts zum Konfigurieren von "extproc" weiter oben beschrieben neu.
Wenn mehrere Objekte ungültig sind, können Sie alle Objekte in demselben Schema neu kompilieren. Informationen dazu, welche Berechtigungen erforderlich sind und wie mehrere Objekte gleichzeitig kompiliert werden können, finden Sie in der Oracle-Dokumentation.