Sonntag, Juni 20, 2010

Oracle Client und die Versionen …

Leider muss ich schon wieder eine ganze Weile mit Oracle Datenbanken arbeiten. Es gibt sovieles, was mich an Oracle stört, aber ein Austauschen ist nicht möglich. Das Schlimmste bei der Arbeit mit Oracle-Datenbanken ist diese nervige Client-Problematik und diese TNSNames-Konfiguration Sch…. In dem Unternehmen in dem ich zur Zeit aktiv bin, gibt es ein relativ umfangreiches Software Management, man hat für Oracle eine Standardversion definiert, die Version 10. Leider gibt es zu der Version nicht den passenden ODP.NET Provider für .NET-Framework 2.0, so dass bisher den FX 1.0 Treiber benutzt wird. Wie man sich denken kann, wird dabei auch nicht alles unterstützt, unteranderem fehlt die Unterstützung für Framework 2.0 Transaktionen. Ein noch viel größeres Problem ist aber, dass es auch durchaus noch Arbeitsplätze mit Ora Client 9 gibt und auf diesen funktioniert es gar nicht. Bei manchen klappt es, wenn die OraOps10.dll vorhanden war, aber  dann ging es auch auf einigen Oracle Client 10 Installationen nicht.

Seit der Version 11, vielleicht auch 10 gibt es eine halbwegs akkzeptable Lösung, der Oracle Instant Client. Mit etwas Aufwand kann man sogar den Client komplett mit nur 5 Dateien mit der eigenen Applikation verteilen und ist nicht damit nicht mehr auf die vorhandene Installation, welche Version auch immer es ist, angewiesen. Nach dem ersten Schritt, finden des Instanat Clients als mögliche Lösungsoptionen, hatte ich mein Problem mit dem Oracle Client nocht nicht final gelöst. Laut Oracle müssen Umgebungsvars gesetzt werden, was dann aber evtl. höhere Rechte beim Einrichten erforderlich machen würde. Nach einigem googlen bin auch den Post "Deploying ODP.NET with Oracle Instant Client" gestoßen und das sieht genau nach der Lösung aus, die ich brauchte. Ich habe mich für den Basic Client entschieden, es gibt auch noch eine Lite-Version, ich wollte nicht das Risiko eingehen, dass Funktionalitäten nicht mehr gehen. (Lite würde ungefähr 30MB ergeben, Basic etwas über 100 MB) Die Dateien

  • oci.dll
  • Oracle.DataAccess.dll
  • oramts.dll
  • oramts11.dll
  • oramtsus.dll
  • orannzsbb11.dll
  • oraocci11.dll
  • oraociei11.dll und
  • OraOps11w.dll

müssen sich bei der Ausführung im Applikationsverzeichnis liegen. OraMTS wird für Transaktionen benötigt. Am besten im Visual Studio Projekt einbinden und "Copy to output directory" auf "Copy if newer" setzen, so dass die Dateie im richtigen Verzeichnis landen.

Einige Probleme gab es noch bei der Konfiguration auf den Rechnern, Oracle ermöglich es viele Einstellungen über Umgebungsvariablen oder Registry vorzunehmen, offensichtlich war durch die vielen Client Versionen auf meinem Rechner einiges "merkwürdig". Ich habe die Einstellungen für "NLS_LANG" und "TNS_ADMIN" in meiner Applikation gesetzt.

   1:  Environment.SetEnvironmentVariable("NLS_LANG", "GERMAN_GERMANY.WE8MSWIN1252")
   2:  Environment.SetEnvironmentVariable("TNS_ADMIN", AppDomain.CurrentDomain.BaseDirectory)

NLS_LANG bei Oracle nachschlagen. TNS_ADMIN ermöglich das Auffinder der TNSNAMES.ORA, ich konnte Transaktionen nicht ohne TNSNAMES aufbauen, es gab immer einen seltsamen Fehler, wenn die "Data Source" im Connection String den TNS-Eintrag enthielt. Nach dem beide Werte gesetzt waren, klappt es wunderbar, hoffentlich auch weiterhin. Vielleicht sollte sich Oracle mal überlegen, ob es nicht schick wäre einen komplett Managed Treiber zu erstellen.

2 Kommentare:

Anonym hat gesagt…

Leider klappt das nicht, sobald auf dem Anwenderrecher ein 11er Oracle-Client nachträglich installiert wird.
Dieser setzt im GAC diverse Policies und leitet den Ora.NET-Treiber auf andere Versionen um, auch stimmen diverse Registry-Einträge dann nicht mehr, so das nicht der mitgelieferte sondern der Installiere Treiber genutzt wird.
Leider gibt es nun einen 'versions-Mix', das das Herstellen einer Datenbankverbindung verhindert.
- wir suchen nun einen alternativen 100% - .NET Client..

Jan Zieschang hat gesagt…

Ah interessant. Ich habe den Fall bisher noch nicht gehabt. Wir haben bisher das Problem, dass alle Clients bis auf 11 vorhanden sind.

Hast du mal geschaut, was an Umgebungsvariablen noch zur manipulation zur Verfügung steht? Es gibt massig Einstellungen mit dem du Ora per Environment-Settings beeinflussen kannst.

Ich bin auch kein Freund von Oracle und ihrer Client/Treiber-Politik, leider wird es bald nicht mehr viel Optionen gebebn, denn MS stellt die Entwicklung des eigenen Oracle-Clients ein. :(

Grüße
Jan