ORACLE Spatial/Locator
Ermöglicht den Zugriff auf ORACLE Datenbanken mit Geometriedaten. Die Implementierung verwendet die OciLIB. D.h. ein Oracle-Instant Client mit installierte OCI Komponente muss auf dem ausführendem Rechner installiert sein. Die installierte Version des Oracle Client wird zur Laufzeit beim ersten Zugriff ermittelt.
Hinweis: Beachten Sie, dass je nach Komponenten die entsprechende 32Bit/64 Bit Version installiert sein muss. Beachten Sie die Hinweis zum InstantClient
Abfragen mittels GeoSQL sind möglich.
Das Einbinden einer Quelle ohne Geometriespalte ist möglich.
Argumente
Typname: OracleLayer
db: TNS Name oder EZ-Connect (
//server:1521/ora
) Verbindungszeichenfolge zum Datenbankserver ()userName: Datenbank Benutzername, kann verschlüsselt angegeben werden
passWord: Kennwort des Datenbankbenutzers, kann verschlüsselt angegeben werden
source :Tabelle oder Abfrage der Datenquelle
geomColumnName: (""): wenn nicht angegeben, dann wird aus der Abfrage {source} die erste Spalte vom Typ Geometry verwendet, sonst bleibt es ein Nicht-Spatial Layer
idColumnName (""): optionaler Name einer Spalte die eindeutige Werte enthält.
lastModColumnName (null): Name einer Spalte, die das Änderungsdatum der Datenzeile als DateTime enthält. Diese Information wird in der Beschreibung der Datenquelle ausgegeben (mit dem Wert, der zum Zeitpunkt des Ladens der Ebene vorhanden war).
Beachte: Wenn angegeben, dann wird diese Information auch bei
quickLoad:true
ermittelt, d.h. es erfolgt dann immer ein Abfrage der Artselect count(*), max(modCol) from ...
.srid (-1): Die SRID der Geometrie, muss angegeben werden, wenn quickLoad true ist.
Die Srid wird nur für das korrekte Erstellen der Geometrien für Vergleiche verwendet, die Projektion wird ausschließlich durch den EpsgCode festgelegt.
Der Wert -1 wird als SRID NULL interpretiert.
epsgCode (-1): Epsg-Code der Daten, wenn nicht definiert, dann wird eine automatische Ermittlung aus der Bounding-Box versucht
quickLoad (false): Wenn false, dann werden Count, SRID und BBox über diese Abfrage ermittelt
sde_version (): Wird dieser Wert übergeben, wird in der Datenbankverbindung nach dem Erstellen
sde.version_util.set_current_version({version})
aufgerufen.style|cssFile: hier immer vom Typ Vektor CSS.
Ladevorgang
Der Ladevorgang wird im Wesentlichen durch die Argumente beeinflusst. In jedem Fall wird eine Abfrage SELECT * FROM {source} WHERE 1 = 0
, bzw. wenn kein IdColumnNamen angegeben ist SELECT ROWID,* FROM {source} WHERE 1 = 0
durchgeführt.
Je nach Quickload wird eine weitere Abfrage für die Statistik ausgeführt.
Beispiel
Hier wird auf die Tabelle SpatialTabelle zugegriffen.
{
"Ora1": {
"type": "OracleLayer",
"userName":"scott",
"password":"tiger",
"db":"//host.local:1521/ora",
"source":"SpatialTabelle",
"epsgCode":31469,
"cssfile": "Marker.css",
"idColumnName":"id"
}
}
Implementierungsdetails / Features und Einschränkungen
Folgende Oracle SDO Funktionen der Datenbank werden verwendet:
- SDO_AGGR_MBR(geom)
- SDO_FILTER(geom,geom,QueryType)
- SDO_RELATE(geom,geom,MASK)
Liste der Geometrieformate: siehe hier
Nicht unterstützte Datentypen
Folgende Oracle-Datentypen werden derzeit nicht unterstützt, d.h. beim Auslesen ignoriert:
- INTERVAL
- OBJECT (außer SDO_GEOMETRY)
- STATEMENT
- FILE
- RAW
- COLLECTION
- REFERENCE
Konvertierungsregeln für numerische Typen
Anbei eine Aufstellung der Datenkonvertierungsregeln für numerische Typen.
Definition Oracle | Ergebnisdatentyp |
---|---|
NUMBER | Double |
NUMBER(*,10) | Double |
NUMBER(20,10) | Double |
NUMBER(9) | Int32 |
NUMBER(10) | Int64 |
NUMBER(*, 0) | Int64 |
NUMBER(10,-2) | Double |
NUMBER(4,0) | Int16 |
NUMBER(5,0) | Int32 |
INTEGER | Int64 |
DECIMAL | Int64 |
DECIMAL(10,5) | Double |
FLOAT | Double |
BINARY_FLOAT | Double |
BINARY_DOUBLE | Double |
ROUND((NI/10),4) | Double |
Ab Version 7.5.3.2 gilt Number(5) = Int32, Number(10) = Int64, vorher waren die Grenzen Number(5)= Int16, Number(10) = Int32.
SQL Statments für intern durchgeführte Abfragen
Ermittlung von Count/BBox (siehe auch Parameter quickLoad):
(
with mbr as
(select rownum coord_seq, column_value coord from table (select sdo_aggr_mbr({geomCol}).sdo_ordinates
from {source}))
select
(select count(*) from {source}) cnt
, (select distinct a.{geomCol}.sdo_srid from {source} a) srid
, (select coord x1 from mbr where coord_seq = 1) MinX
, (select coord y1 from mbr where coord_seq = 2) MinY
, (select coord x2 from mbr where coord_seq = 3) MaxX
, (select coord y2 from mbr where coord_seq = 4) MaxY
from dual
)
Ist quickLoad true, dann wird lediglich SELECT COUNT(*) FROM
ausgeführt.
Übersetzung der Geometrie-Filter Aktionen
Für ST_Intersects und ST_Relate mit der Relation-Matrix T********
werden folgende Übersetzungen vorgenommen:
Intersects:
SDO_RELATE(COL,cmp,
'mask=anyinteract querytype=WINDOW'
) = 'TRUE'
DefaultRelateT8Stars:
SDO_RELATE(COL,cmp,
'mask=contains+coveredby+covers+inside+on+overlapbdydisjoint+overlapbdyintersect+equal querytype=WINDOW'
) <> 'FALSE'
Hinweise zur Verwaltung der Datenbankverbindungen
Die Verbindungen werden immer in einem OCIConnection-Pool vom Typ "SessionPool" verwaltet.
Es wird dabei pro Datenbank und Benutzername ein Pool erstellt. Dieser wird mit Schließen der letzten Ebene wieder entfernt.
Die Standardwerte sind:
- Maximale Anzahl Verbindungen: 500 (IDUIT_ORAPOOL_NOWAIT)
- Minimale Anzahl Verbindungen: 0
- Schließen der Verbindungen im Leerlauf nach: 30 Sekunden
- Warten: Ja, d.h. wenn alle max-Verbindungen verwendet werden, dann wartet die Anforderung bis eine von diesen frei wird (IDUIT_ORAPOOL_MAXCONNS).
Zum Ändern des Verhaltens können die Umgebungsvariablen ...
IDUIT_ORAPOOL_NOWAIT
{true|false|0|1}IDUIT_ORAPOOL_MAXCONNS
{1...n}
gesetzt werden.
Nach dem Ändern ist ein Neustart des Prozesses erforderlich.
Hinweise zum Oracle-Client
Für die Nutzung der Oracle Komponenten ist ein OracleClient auf dem ausführendem Rechner erforderlich.
Es genügt ein Instant-Client. Auf Grund verschiedener Probleme im Zusammenhang mit weiteren installierten Komponenten haben wir mit Version 7.1.0.9 eine eigene Suchstrategie für den zu verwendenden OracleClient eingeführt.
- Es wird geprüft, ob eine Umgebungsvariable
IDUIT_ORACLIENT_PATH
vorhanden ist, - ... wenn nicht, wird als Pfad
C:\OracleInstanceClient4IduIT
angenommen.
In dem so ermitteltem Pfad muss ein Unterordner x86
, bzw. x64
vorhanden sein.
Wenn dieser Ordner vorhanden ist, wird der dort hinterlegte Instant-Client verwendet.
Das Vorgehen ist optional, ist die o.g. Bedingung nicht gegeben, wird die Standard-Suche entsprechend der Oracle Regeln durchgeführt.
Wir empfehlen, eine aktuelle Version des Oracle-Instant Client zu verwenden.
Laden Sie von der Oracle Downloadseite die Version für Microsoft Windows (x64) und Microsoft Windows 32-bit herunter.
Verwenden Sie die Version 21.10 oder Version 18.5
Sie benötigen ein Login auf der Oracle Seite für bestimmte Versionen.
Speichern Sie den Inhalt der Zip-Dateien in dem entsprechend benannten Ordner.
Es genügen dabei die Dateien oci.dll und die oraociicus.dll
Alternativ: Unsere Kunden finden das Zip unter /downloads/OracleInstanceClient4IduIT.zip (Version 18.5) oder /downloads/OracleInstanceClient4IduIT_21.zip (Version 21.10)
Problemlöser
Fehlermeldung: oder eine Ihrer Abhängigkeiten
oder Cannot load OCI shared library (oci.dll)
Mögliche Lösung: Evtl. muss eine Version 2013 der VCRedist von Microsoft installiert werden (siehe Hinweise im Downloadbereich des Oracle Client).
Bei der Version 21.10 ist das nicht erforderlich.
Fehlermeldung: Cannot create OCI environment
Mögliche Lösung: Ein Prozess kann nur eine Version des Oracle Clients laden. Sollten bspw. die IduIT.GeoLib.Net im IIS eingesetzt werden, dann stellen Sie sicher, dass eine evtl. genutzte andere Version (bspw. Oracle ODP.Net) die gleichen Binaries verwendet. Im genannten Fall kann dies durch Eintragen des DLLPath in der web.config sichergestellt werden:
<configuration>
<oracle.dataaccess.client>
<settings>
<add name="DllPath" value="C:\OracleInstanceClient4IduIT\x86"/>
</settings>
</oracle.dataaccess.client>
...
Zuletzt geändert: 20.09.2024 07:22:06 (erstmals erstellt 19.04.2017)