"ST_Geometry"-Funktionsaufrufe
"ST_Geometry"-Funktionen werden unter Oracle und PostgreSQL per Structured Query Language (SQL) implementiert. Dies ist eine Sprache auf Datenbankebene. In Oracle ist dies die Procedural Language Structured Query Language (PL/SQL). In PostgreSQL ist dies "PL/pgSQL".
Wenn Sie mithilfe von SQL-Funktionen auf "ST_Geometry"-Spalten zugreifen, greifen Sie direkt auf die Datenbank zu. Daher muss die Datenbank Zugriff auf die "ST_Geometry"-Funktionen haben. In Oracle erzeugt die Datenbank außerdem einen "extproc"-Prozess.
PostgreSQL
Die Bibliothek "st_geometry" muss im Installationsverzeichnis von PostgreSQL gespeichert werden, damit PostgreSQL auf die "ST_Geometry"-Funktionen zugreifen kann. Wenn Sie ArcSDE auf dem gleichen Windows-Server wie PostgreSQL installieren, indem Sie den ArcSDE for PostgreSQL-Installationsassistenten verwenden, wird die Datei "st_geometry.dll" für Sie in den Ordner "lib" von PostgreSQL kopiert. Falls sich die Datenbank auf einem anderen Server als ArcSDE befindet oder Sie die Installation auf einem Linux-Server durchführen, müssen Sie die Bibliothek manuell in das PostgreSQL-Installationsverzeichnis kopieren. Auf Linux-Servern müssen Sie die Bibliothek "st_geometry.so" in das Verzeichnis "/usr/lib/pgsql" kopieren.
Oracle
Die Funktionen sind in PL/SQL implementiert. Bei dieser Sprache werden Funktionen in externen freigegebenen Bibliotheksdateien aufgerufen, die in der Programmiersprache C geschrieben wurden. Die Funktionen werden von PL/SQL mittels eines Aliasnamens abgerufen, der den Namen der Bibliothek (bei "ST_Geometry" in Oracle ist dies ST_SHAPELIB) mit dem Namen der Bibliotheksdatei verknüpft. (Weitere Informationen zum Oracle-Befehl CREATE LIBRARY finden Sie in der Dokumentation.) Wenn eine Spatial Type-Funktion, die ST_SHAPELIB erfordert, zum ersten Mal aufgerufen wird, fordert die Datenbank den Listener auf, einen "extproc"-Vorgang für die SQL-Sitzung zu erstellen. Extproc erhält den Speicherort von ST_SHAPELIB, den Namen der aufgerufenen Funktion und die entsprechenden Parameter. Extproc lädt ST_SHAPELIB und ruft die Funktion auf. Wenn die externe Funktion abgeschlossen ist, gibt extproc die Ergebnisse zurück und bleibt weiterhin aktiv und wartet auf weitere Funktionsaufrufe während dieser Sitzung. Der extproc-Vorgang wird beendet, wenn die SQL-Sitzung getrennt wird.
Für eine ordnungsgemäße Funktionsweise ist die folgende Konfiguration erforderlich:
- Die Datenbank benötigt den Speicherort der Datei, die ST_SHAPELIB enthält, damit sie diese Informationen an den Listener-Vorgang und an extproc weiterleiten kann.
- Wenn die Angabe unter "file_spec" für ST_SHAPELIB in der Tabelle "user_libraries" nicht mit dem physischen Dateispeicherort von ST_SHAPELIB auf dem Server übereinstimmt, funktionieren "ST_Geometry"-Operatoren und -Funktionen nicht. Aus diesem Grund müssen Sie die Bibliotheksdefinition in den Oracle-Benutzerbibliotheken aktualisieren, damit diese den richtigen Bibliothekspfad zur Datei mit ST_SHAPELIB enthält, indem Sie den Befehl CREATE LIBRARY verwenden. Hinweis:
Durch eine Änderung der Definition des Bibliothekspfads werden Pakettexte ungültig, die darauf verweisen. Aus diesem Grund müssen die Pakettexte einiger gespeicherter Prozedurpakete von ArcSDE mithilfe von Oracle neu kompiliert werden.
- Die Datenbank muss den Service kennen, der die Anfragen an extproc bearbeitet. Dies wird in der Datei "tnsnames.ora" konfiguriert.
- Extproc muss die Datei, die ST_SHAPELIB enthält, laden können. Dies wird dadurch garantiert, dass die Umgebungsvariable EXTPROC_DLLS in der Datei "listener.ora" definiert wird.
- Extproc (wird normalerweise mit dem Benutzer, der ORACLE_HOME besitzt, ausgeführt) benötigt Leseberechtigungen (READ) für den Speicherort der Bibliotheksdaten sowie Ausführungsberechtigungen (EXECUTE) für die Dateien selbst.
- Der Listener muss nach der Konfiguration neu gestartet werden, bevor die Änderungen wirksam werden.