Speichertyp "ST_Geometry" in Oracle

Der Speichertyp "ST_Geometry" von Esri ist für Geodatabases in Oracle und für Oracle-Datenbanken verfügbar und stellt den International Organization for Standards (ISO)- und Open Geospatial Consortium, Inc. (OGC)-kompatiblen SQL-Zugriff (Structured Query Language) auf die Geodatabase bereit. Dieser Speichertyp erweitert die Funktionen der Oracle-Datenbank, indem er die Speicherung von Objekten (Punkte, Linien und Polygone) ermöglicht, die geographische Features darstellen. Er ist konzipiert, um die effiziente Verwendung von Oracle-Datenbankressourcen zu ermöglichen, um mit Oracle-Datenbank-Features wie z. B. Replikation und Partitionierung kompatibel zu sein und um schnellen Zugriff auf räumliche Daten zu bieten. Er ermöglicht es Ihnen, räumliche Daten in andere Typen der Geschäftsdaten zu integrieren, dadurch erhält die Mehrbenutzer-Datenbank den Vorteil, eine geographische Komponente zu den Analysen und Datenprodukten hinzufügen zu können. Die räumlichen Daten zusammen mit anderen Geschäftsobjekten zu speichern vereinfacht auch den Mehrbenutzerzugriff, die Verwaltung und die Sicherheit der Daten, da Sie weniger Datenspeicherressourcen verwalten müssen.

Ab ArcGIS 9.3 und neueren Versionen verwenden neue Geodatabases für Oracle standardmäßig den räumlichen Datentyp "ST_Geometry" von Esri für die Geometriespeicherung. Er implementiert die SQL 3-Spezifikation benutzerdefinierter Datentypen (UDTs) und ermöglicht es Ihnen, Spalten zu erstellen, die zum Speichern von räumlichen Daten wie der Lage eines Orientierungspunktes, einer Straße oder eines Flurstückes geeignet sind. Eine Erklärung des räumlichen Datentyps "ST_Geometry" finden Sie im Abschnitt "Wie ST_Geometry räumliche Daten speichert" dieses Themas.

HinweisHinweis:

Um eine Geodatabase zu erstellen und den ST_Geometry-Typ und den Domänenindex im Oracle-DBMS zu verwenden, müssen dem Geodatabase-Administratorbenutzer (SDE) die entsprechenden Systemberechtigungen gewährt werden, um Typen, Operatoren und gespeicherte Prozeduren instanziieren zu können. Weitere Informationen zu den erforderlichen Berechtigungen finden Sie unter Benutzerberechtigungen für Geodatabases in Oracle. Um den ST_Geometry-Typ in einer Oracle-Datenbank zu installieren, muss auch ein SDE-Benutzer vorhanden sein. Außerdem müssen die spezifischen Systemberechtigungen gewährt werden, um Typen, Operatoren und gespeicherte Prozeduren instanziieren zu können. Weitere Informationen finden Sie unter Hinzufügen des Speichertyps "ST_Geometry" zu einer Oracle-Datenbank.

Wenn Sie den räumlichen Datentyp "ST_Geometry" von Esri in einer Geodatabase in Oracle oder einer Oracle-Datenbank verwenden, können Sie auf die räumlichen Daten über SQL-Funktionen, die den räumlichen ISO SQL/MM-Standard implementieren, und über die Simple Feature Specification des OGCs zugreifen. Sie können SQL-Befehle zum Speichern, Abrufen und Bearbeiten von räumlichen Features wie bei jedem anderen Datentyp verwenden. Sie können eine lange Liste standardbasierter Funktionen mit SQL-Befehlen und gespeicherten Prozeduren verwenden, um räumliche Daten abzurufen und zu analysieren. Der SQL-Zugriff auf die Daten macht es möglich, mit anderen Anwendungen auf Daten zuzugreifen, die in einer ArcSDE-Geodatabase für Oracle erstellt wurden.

HinweisHinweis:

Der Typ "ST_Geometry" wird nicht für Oracle XA-Transaktionen unterstützt.

Um mit SQL auf eine Geodatabase in Oracle zuzugreifen, die den räumlichen Datentyp verwendet, müssen Sie den Oracle-Listener konfigurieren. Weitere Informationen finden Sie unter Konfigurieren des Oracle-Listeners für die Verwendung von SQL.

Für ArcGIS 9.3 und neuere Versionen erfordern neue Geodatabases für Oracle, dass alle ST-Funktionen und -Operatoren mit dem sde-Schemanamen qualifiziert werden. Beispiel: Beim Ausführen einer Abfrage, die den ST_Union-Operator verwendet, muss der Operator als "sde.ST_Union" eingegeben werden. Für Geodatabases, die von ArcSDE 9.2 oder früher aktualisiert wurden, ist dies nicht erforderlich.

Um mit SQL auf räumliche Features zuzugreifen, müssen die ST_Geometry-Bibliotheken auf dem gleichen Server wie das Oracle-Datenbankmanagementsystem (DBMS) installiert sein. Wenn Sie planen, das Oracle-DBMS auf einem anderen Server als dem von ArcSDE auszuführen, stellen Sie sicher, dass das Betriebssystem des Oracle-Servers auch für ArcSDE unterstützt wird und dass die ST_Geometry-Bibliotheken dort installiert sind.

Wie ST_Geometry räumliche Daten speichert

Nachfolgend finden Sie die Oracle-Beschreibung von ST_Geometry:

Name

Typ

ENTITY

NUMBER(38)

NUMPTS

NUMBER(38)

MINX

FLOAT(64)

MINY

FLOAT(64)

MAXX

FLOAT(64)

MAXY

FLOAT(64)

MINZ

FLOAT(64)

MAXZ

FLOAT(64)

MINM

FLOAT(64)

MAXM

FLOAT(64)

AREA

FLOAT(64)

LEN

FLOAT(64)

SRID

NUMBER(38)

POINTS

BLOB

Die Attribute des räumlichen Datentyps stellen die folgenden Informationen dar:

Wie andere Objekttypen enthält auch der ST_Geometry-Datentyp eine Konstruktormethode und Funktionen. Eine Konstruktormethode ist eine Funktion, die eine neue Instanz (Objekt) des Datentyps zurückgibt und die Werte seiner Attribute festlegt.

Der Name des Konstruktors ist der gleiche wie der Typ (ST_Geometry). Wenn Sie ein Objekt vom Typ "ST_Geometry" instanziieren, rufen Sie die Konstruktormethode auf. Beispiel:

CREATE TABLE hazardous_sites (name        varchar2(128),
                              location    st_geometry);

Die folgenden ST_Geometry-Accessorfunktionen nehmen eine einzelne ST_Geometry als Eingabe und geben den angeforderten Eigenschaftswert als Zahl zurück.

Die folgende Abfrage gibt z. B. den Namen und die Fläche der einzelnen Staaten in den USA zurück.

SELECT name, st_area(geometry)
FROM us_states
ORDER BY name;

"ST_LineString", "ST_MultiLineString", "ST_MultiPoint", "ST_MultiPolygon", "ST_Point" und "ST_Polygon" sind alle Subtypes (oder Subclasses) von "ST_Geometry". "ST_Geometry" und die zugehörigen Subtypes haben gemeinsame Attribute und Funktionen. Die Konstruktordefinition für "ST_LineString", "ST_MultiLineString", "ST_MultiPoint", "ST_MultiPolygon", "ST_Point" und "ST_Polygon" ist die gleiche. Der Name des Konstruktors ist der gleiche wie der konstruierte Typ.

Da "ST_Point" ein endliches Objekt (ein einzelner Punktwert) ist, kann es auch mit einer der folgenden Methoden erstellt werden.

Diese Methode verwendet Koordinatenpunkte und eine SRID.

METHOD

 FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
 Argument Name                  Type                    In/Out Default?

 PT_X                           NUMBER                  IN
 PT_Y                           NUMBER                  IN
 SRID                           NUMBER                  IN

SQL> INSERT INTO sample_pt VALUES (ST_Point (10, 20, 1) );

Diese Methode ermöglicht es einem Benutzer, Koordinatenpunkte und einen Höhenwert für jeden Punkt anzugeben.

METHOD

 FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
 Argument Name                  Type                    In/Out Default?
 
 PT_X                           NUMBER                  IN
 PT_Y                           NUMBER                  IN
 PT_Z                           NUMBER                  IN
 SRID                           NUMBER                  IN

SQL> INSERT INTO sample_pt VALUES (ST_Point (10, 20, 5, 1) );

Diese letzte Methode für "ST_Point" lässt darüber hinaus einen Messwert zu, der als Teil des erstellten Punktobjekts angegeben wird.

METHOD

 FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
 Argument Name                  Type                    In/Out Default?

 PT_X                           NUMBER                  IN
 PT_Y                           NUMBER                  IN
 PT_Z                           NUMBER                  IN
 MEASURE                        NUMBER                  IN
 SRID                           NUMBER                  IN

SQL> INSERT INTO sample_pt VALUES (ST_Point (10, 20, 5, 401, 1) );

SP_GRID_INFO

"SP_Grid_Info" wird in der Tabelle "ST_Geometry_Index" als Datentyp für das Feld GRID verwendet. Es enthält die Gitterebeneninformationen für räumliche Indizes.

SQL> desc sp_grid_info
 Name                                      Null?    Type

 GRID1                                              NUMBER
 GRID2                                              NUMBER
 GRID3                                              NUMBER

Metadaten-Schema

Der ST_Geometry-Typ für Oracle und Metadatentabellen gehören dem SDE-Schema. Die Schemadefinition ist die Basistabellenbeschreibung für Metadatentabellen, die verwendet wird, um den Typ Spalte/Tabelle, den räumlichen Index (der Domänenindex "ST_Spatial_Index") und die Raumbezugsinformationen zu definieren und zu beschreiben. Alle Typen und Domänenindex-Typdefinitionen, Pakete und Metadatentabellen werden im SDE-Schema erstellt.

Da die Definitionen für "ST_Geometry" dem SDE-Benutzer gehören, löschen Sie niemals den SDE-Benutzer aus der Datenbank, wenn Sie Tabellen in der Datenbank haben, die ST_Geometry-Spalten enthalten. Das würde dazu führen, dass auf diese Tabellen nicht zugegriffen werden kann.

Im Application Developers Guide von Oracle wird erwähnt, dass, wenn ein Benutzer aus der Datenbank gelöscht wird, eine der Löschanweisungen, die ausgeführt wurde, DROP TYPE mit der Option FORCE ist. Diese Anweisung entfernt alle Typen, die diesem Benutzer gehören, damit der Benutzer aus der Datenbank entfernt werden kann. DROP TYPE FORCE löscht Typen auch dann, wenn sie abhängige Typen oder mit ihnen verknüpfte Tabellen aufweisen. Wenn das geschieht, werden die zugehörigen Tabellen als ungültig markiert und auf die Daten in den Tabellen kann nicht mehr zugegriffen werden.

Eine Beschreibung der folgenden ST_Geometry-Metadatentabellen finden Sie unter Systemtabellen einer Geodatabase in Oracle:

  • ST_COORDINATE_SYSTEMS
  • ST_GEOMETRY_COLUMNS
  • ST_GEOMETRY_INDEX
  • ST_SPATIAL_REFERENCES

Erstellen von Feature-Classes in Oracle mit dem Speichertyp "ST_Geometry"

Der für eine Feature-Class verwendete Geometriespeichertyp wird von der Einstellung GEOMETRY_STORAGE im Konfigurationsschlüsselwort bestimmt, das Sie angeben, wenn Sie die Feature-Class erstellen.

Einstellen von "ST_Geometry" als Standardspeichertyp für neue Feature-Classes

Ab ArcGIS 9.3 ist "ST_Geometry" der Standardspeichertyp für Feature-Classes in einer Geodatabase in Oracle. Das bedeutet, der Parameter GEOMETRY_STORAGE des Schlüsselworts DEFAULTS in der DBTUNE-Tabelle wird auf ST_GEOMETRY festgelegt.

Wenn Sie die meisten Feature-Class-Daten im ST_Geometry-Format speichern möchten, lassen Sie den Parameter GEOMETRY_STORAGE des Schlüsselworts DEFAULTS auf ST_GEOMETRY eingestellt.

Wenn Sie die Geodatabase anfänglich vor ArcGIS 9.3 erstellt haben und alle neuen Feature-Classes standardmäßig mit dem Format "ST_Geometry" erstellen möchten, müssen Sie den Parameter GEOMETRY_STORAGE unter dem Schlüsselwort DEFAULTS in der DBTUNE-Tabelle ändern. Legen Sie den Parameter GEOMETRY_STORAGE auf ST_GEOMETRY fest.

HinweisHinweis:

Verwenden Sie den administrativen sdedbtune-Befehl, um DBTUNE-Einstellungen zu ändern. Weitere Informationen zur Verwendung des Befehls "sdedbtune" finden Sie unter Ändern des Inhalts der Tabelle DBTUNE, nachdem sie erstellt wurde und in der ArcSDE Administration Command Reference, die mit dem ArcSDE-Anwendungsserver für Oracle bereitgestellt wird.

Verwenden des Formats "ST_Geometry" für einige der Feature-Classes

ArcSDE for Oracle unterstützt eine Reihe von anderen Geometriespeicherschemas – diese anderen Schemas können alle zusammen in der gleichen Datenbank verwendet werden. Während es nur ein Standard-Geometrieschema geben kann, können einzelne Tabellen mit verschiedenen Geometrieschemas erstellt werden.

Wenn Sie nur einige der Feature-Classes mit dem räumliche Datentyp-Speicher speichern möchten, können Sie DEFAULTS GEOMETRY_STORAGE auf einen anderen Speichertyp festlegen und dann das Schlüsselwort ST_GEOMETRY angeben, wenn Sie einige der Feature-Classes erstellen. Wenn Sie dies tun, wird die jeweilige Feature-Class mit einer "ST_Geometry"-Spalte erstellt. In der Datei "dbtune" wird das Schlüsselwort ST_GEOMETRY wie folgt angezeigt:

##ST_GEOMETRY
GEOMETRY_STORAGE    "ST_GEOMETRY"
ATTRIBUTE_BINARY    "BLOB"
RASTER_STORAGE	    "BLOB"
ST_GEOM_LOB_STORAGE  " STORE AS (
#               TABLESPACE <tablespace_name>
                ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE)"

UI_TEXT             "User Interface text description for ST_GEOMETRY"

COMMENT             "Any general comment for ST_GEOMETRY keyword"

END

Welche Datenbankobjekte werden erstellt und wo werden sie gespeichert?

Es werden drei Datenbankobjekte erstellt, wenn Sie mithilfe von ArcGIS eine Feature-Class erstellen, die das Format "ST_Geometry" verwendet. Diese Objekte und die DBTUNE-Parameter, die verwendet werden, um die Speicherung zu steuern, sind in der folgenden Tabelle aufgeführt:

Datenbankobjekte

Speicherparameter

Tabelle mit einer "ST_Geometry"-Spalte

Der Parameter B_STORAGE definiert die Speichermethode für die Tabelle.

Der Parameter ST_GEOM_LOB_STORAGE definiert die Speichermethode für LOB-Segmente in der Tabelle.

Räumlicher Index

Der Parameter S_STORAGE definiert den räumlichen Indexspeicher.

Index für die ObjectID-Spalte

Der Parameter B_INDEX_ROWID definiert die Speichermethode für diesen Index.

Weitere Informationen zu Konfigurationsparametern finden Sie in DBTUNE-Konfigurationsparameter für Oracle und im folgenden Abschnitt zur LOB-Speicherung.

Einstellen des Speichers für das LOB-Segment

Sie sollten den Parameter ST_GEOM_LOB_STORAGE unter der Schlüsselwortliste DEFAULTS ändern. Beim Hinzufügen zum Schlüsselwort DEFAULTS sollte jedoch der LOB-Segmentname nicht in der Definition dieses Parameters enthalten sein. Wenn er enthalten ist und Sie den Wert für den Namen vor dem Erstellen eines zweiten Features nicht ändern, schlägt es fehl, da jeder LOB-Segmentname für ein gegebenes Schema eindeutig sein muss. Das folgende Beispiel für einen ST_GEOM_LOB_STORAGE-Parameter enthält keine Objektnamen, dadurch werden Namenskonflikte innerhalb des gleichen Schemas vermieden:

ST_GEOM_LOB_STORAGE  " STORE AS (
  ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE)"

Beispiele für gültige Werte für den Parameter ST_GEOM_LOB_STORAGE:

##ST_GEOMETRY
GEOMETRY_STORAGE    "ST_GEOMETRY"
ATTRIBUTE_BINARY    "BLOB"
RASTER_STORAGE	    "BLOB"
ST_GEOM_LOB_STORAGE  " STORE AS (TABLESPACE TERRA_NDX ENABLE STORAGE IN ROW CHUNK 8K
 RETENTION CACHE)"

UI_TEXT             "User Interface text description for ST_GEOMETRY"

COMMENT             "Any general comment for ST_GEOMETRY keyword"

END

##ST_GEOMETRY
GEOMETRY_STORAGE    "ST_GEOMETRY"
ATTRIBUTE_BINARY    "BLOB"
RASTER_STORAGE	    "BLOB"
ST_GEOM_LOB_STORAGE  " STORE AS (ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE)"

UI_TEXT             "User Interface text description for ST_GEOMETRY"

COMMENT             "Any general comment for ST_GEOMETRY keyword"

END

Wie zuvor in diesem Abschnitt erwähnt, wenn Sie LOB- und LOB-Index-Tablespace-Namen definieren, müssen Sie diese Werte vor jeder Feature-Class-Erstellung ändern. Wenn Sie dies nicht tun, schlagen nachfolgende Feature-Class-Erstellungen fehl, da jeder Segmentname eindeutig sein muss.

9/11/2013