Seiten

Posts mit dem Label Windows werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Windows werden angezeigt. Alle Posts anzeigen

Freitag, 24. April 2015

APEX 5.0 und der Thoth-Gateway für den IIS

Das neue APEX-Release bringt ein paar Änderungen mit, die beim Aufruf über den IIS mit Thoth bis Version 1.4.0 beta zum solchen Fehlermeldungen führen:

X-ORACLE-IGNORE: IGNORE X-ORACLE-IGNORE: IGNORE X-ORACLE-IGNORE: IGNORE X-ORACLE-IGNORE: IGNORE Status:302 Location:f?p=110:1::::::

Beheben lässt sich das nur, indem man die aktuelle Thoth-Version (1.4.1) installiert, die Morten Braten bereits zur Verfügung stellt.
Mit der neuen Version (seit 1.4.0) ist es unter anderem nicht mehr notwendig, einen Oracle-Client auf dem Webserver zu installieren.

Donnerstag, 6. März 2014

Powershell und Oracle-connect

Ein Testconnectskript

Die PowerShell ist ein tolles Werkzeug. Man kann Sie für ausgeklügelte Backupskripte benutzen, das Housekeeping damit automatisieren und auch auf die Oracle-DB zugreifen.
Der Zugriff ist manchmal nicht so einfach einzurichten. Gerade, wenn es mehrere ORACLE_HOMEs auf dem Rechner gibt, kann man eine Menge Zeit mit der Suche nach dem richtigen Connectionstring und dem genutzten ORACLE_HOME verschwenden - ich habe jedenfalls schon viel Zeit damit verschwendet.
Deshalb nutze ich seit einiger Zeit dieses Test-Skript, welches ich auf dem entsprechenden Rechner nur noch anpasse:



$AssemblyFile     = "D:\oracle\product\11.2.0.4\dbhome_1\ODP.NET\bin\2.x\Oracle.DataAccess.dll"
$ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=
                        (PROTOCOL=TCP)
                        (HOST=server01)
                        (PORT=1521))
                        (CONNECT_DATA=(SERVICE_NAME=orcl)));
                        User Id=oradba;
                        Password=orapwd"
$CommandText = "SELECT count(*) FROM all_users"
[Reflection.Assembly]::LoadFile($AssemblyFile)
$OracleConnection = ""
$OracleConnection = New-Object -TypeName Oracle.DataAccess.Client.OracleConnection
$OracleConnection.ConnectionString = $ConnectionString
$OracleConnection.Open()
$OracleCommand = New-Object -TypeName Oracle.DataAccess.Client.OracleCommand
$OracleCommand.CommandText = $CommandText
$OracleCommand.Connection = $OracleConnection
$OracleDataAdapter = New-Object -TypeName Oracle.DataAccess.Client.OracleDataAdapter
$OracleDataAdapter.SelectCommand = $OracleCommand
$DataSet = New-Object -TypeName System.Data.DataSet
$OracleDataAdapter.Fill($DataSet)
$OracleDataAdapter.Dispose()
$OracleCommand.Dispose()
$OracleConnection.Dispose()
$OracleConnection.Close()
$DataSet.Tables[0]

Hier müssen nur die Variablen $AssemblyFile und $ConnectionString angepasst werden. Wenn alles in Ordnung ist, sieht die Ausgabe so aus:

Powershell ISE ohne tnsnames.ora

Ich verwende sehr gern die PowerShell ISE. Beim Testen zickt sie aber gern.
Wenn man auf eine DB zugreifen möchte (korrekter Code, alles i.O....) und die DB ist in der tnsnames.ora nicht korrekt eingetragen, bekomme man einen Fehler.
Soweit korrekt.
Jetzt korrigiert man natürlich die tnsnames.ora und versucht den connect erneut.
Die überraschende Folge: Gleiche Fehlermeldung.

Wenn man jetzt aber die PS ISE schließt, erneut startet und den selben Code wieder ausführt: keine Fehlermeldung, alles läuft durch!?!

Meiner Meinung nach prüft die ISE die Systemumgebung nicht erneut oder hat einen Cache, der nicht geleert wird - was auch immer - und liest die aktualisierte tnsnames.ora nicht.
Das ist der Grund, warum ich oben genanntes Skript verwende. Es greift nicht auf die tnsnames.ora zu sondern  nutzt direkt den Connectionstring. (http://www.connectionstrings.com/oracle/)

Dienstag, 20. August 2013

Thoth - APEX mit dem IIS

Oracle bietet von Haus aus bereits 3 verschiedene Web-Listener für den DB-Zugriff über APEX:
  1. das embedded PL/SQL Gateway,
  2. den APEX-Listener und
  3. Oracle HTTP Server (OHS) mit mod_plsql - einem Apache-Webserver.
Das sollte an und für sich genügen.

Aber: Sofern die eigene Firma den Einsatz eines Microsoft IIS vorschreibt, sieht man alt aus.
Morten Braten hat hier glücklicherweise einen Ausweg parat: Thoth Gateway - PL/SQL Gateway Module for Microsoft IIS
Wenn man die Installation hinter sich gebracht hat, tut Thoth klaglos seinen Dienst.

Man umgeht durch den Einsatz von Thoth aber andere Probleme in Bezug auf Lizenzkosten und Virtualisierung:
Falls man den OHS nicht auf einem DB-Server einsetzen möchte - und das dürfte im produktiven Einsatz die Regel sein - muss z.B. Oracle Web Tier erworben werden. Das kann sehr schnell kostspielig werden, da hier wieder die üblichen Fallen lauern. (Prozessoranzahl, Virtualisierung...)

Ein Nachteil von Thoth, der nicht verschwiegen werden soll:
Das Gateway wird derzeit von nur einem Entwickler gepflegt, ist dafür aber Open Source und bereits in Version 1.3.7 verfügbar.