ODBC mit dem Oracle Instant Client

Oracle ODBC Client

Hier eine kleine Episode aus dem täglichen Job… immer wieder kommt dieses unsägliche ODBC-Treiber Thema auf den Tisch des leidenden Administrators.

In diesem Fall braucht eine Anwendung Zugriff per ODBC auf eine neue Oracle Datenbank. Es soll aber kein vollständiger Oracle Client installiert werden, da die Client-Maschine sowieso schon mehrere Oracle Client-Umgebungen in verschiedenen Versionen von verschiedenen Anwendungen in 32bit und 64bit hat. Zur Vereinheitlichung der einzelnen Clients soll daher der Oracle Instantclient passend zur Oracle Datenbankversion zum Zuge kommen.

Bevor man mit der Installation tatsächlich loslegt, sollte geprüft werden, ob die passenden Microsoft Visual C++ Bibliotheken installiert sind. Sollte dies nicht der Fall sein, kommt es hinterher zu dubiosen Meldungen, die allesamt in die falsche Richtung weisen. Die Info, welche Version des Treibers benötigt wird, ist auf der Downloadseite neben dem Instantclient Basic-Package zu finden. Hier können zusätzlich auch noch andere Oracle Instant Client Produkte herunter geladen werden. Die aktuelle Version benötigt die Bibliotheken aus Version 2017, ältere bedienen sich der Versionen 2013 bzw. 2010. Hier ist unbedingt darauf zu achten, dass die benötigte 32bit oder 64bit Version installiert wird. Leider prüft das Batchprogramm für die Installation nicht, ob die passende C++-Runtime installiert wurde.

OK. Instant Client Basic- und ODBC-Package herunterladen und in ein Verzeichnis entpacken. Dann noch odbc_install.exe ausführen und es kann mit dem Erstellen der ODBC-Verbindung mit dem ODBC-Administrationstool losgehen. Die ODBC-Verbindung kann mit dem ODBC-Administrationstool auch konfiguriert werden. Bis hierher eigentlich recht einfach.

In diesem Fall kam die Anwendung jedoch nicht mit der Spracheinstellung des Systems klar. Abfragen auf die Datenquelle, die in Suchtexten Umlaute enthalten wurden nicht korrekt ausgeführt. Allerdings half die Änderung der Einstellung in ODBC-Abfrage nicht (regionale oder US-Einstellungen ergaben das gleiche Ergebnis wie die Nutzung der NLS-Einstellung). Eigentlich logisch, denn die Einstellung bezieht sich auf “Numeric”-Inhalte bzw. Datentypen.

Nach längerem Testen ergab sich die Lösung darin, dass ein Eintrag in der Registry ergänzt wurde. Da der Instand Client keinen eigenen Clientschlüssel in Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Oracle (bzw. in WOW6432Node beim Oracle ODBC driver 32 Bit-Client) anlegt, wurde NLS_LANG direkt dort eingetragen. Und siehe da, der Instant Client bezieht die NLS-Einstellung tatsächlich hieraus.

Die Anwendung kann nun auch mit einer anderen Sprache arbeiten und die Abfragen funktionieren wieder. Schade, dass die nicht offensichtlich dokumentiert ist.