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.

  • 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.

  1. Es wird geprüft, ob eine Umgebungsvariable IDUIT_ORACLIENT_PATH vorhanden ist,
  2. ... 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.

Oraclient Folder

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: 13.03.2024 12:40:13 (erstmals erstellt 19.04.2017)