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, 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 für Ihr Betriebssystem und Ihre Client-Version spezifische Bibliotheksdatei von My Esri herunterladen.
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 Oracle-Instanz zugreifen kann.
Führen Sie die folgenden Schritte aus, bevor Sie die Datei "extproc" von Oracle konfigurieren:
- Laden Sie die Bibliothek "ST_Geometry" von My Esri herunter, und legen Sie sie in einem Verzeichnis auf dem Oracle-Computer ab.
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 ArcGIS-Anforderungen für Oracle. 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 wurde die Datei st_shapelib.dll in ein Verzeichnis namens "mylibraries" auf dem Oracle-Computer kopiert. 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
Sie müssen neue Versionen der Bibliotheksdatei herunterladen oder kopieren, um die Fixes und Verbesserungen in neuen Versionen der Bibliothek zu erhalten, wenn Sie die Geodatabase in Oracle aktualisieren oder ein Upgrade des Typs "ST_Geometry" in einer Oracle-Datenbank durchführen müssen.
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.