Thomas Kramer

IT-COW | All posts tagged 'ODBC'

32-Bit-ODBC-Verbindung zu einer 64-Bit-Oracle-Datenbank herstellen, unter Vista64

By Administrator at April 08, 2010 19:22
Filed Under: Administration, Workarounds

Vista64 ist hier leider etwas gewöhnungsbedürftig. Standardmäßig ist hier nämlich unter

 

Systemsteuerung/Verwaltung/Datenquellen (ODBC)

 

nur die 64-Bit-ODBC-Datenquellenverwaltung erreichbar. Benötigt man aber die 32-Bit-ODBC-Datenquellenverwaltung muß man die Datei odbcad32.exe im Verzeichnis Windows/SysWOW64/ aufrufen. Die 64-Bit-Version ist übrigens im Verzeichnis Windows/System32/ zu finden, auch unter odbcad32.exe.

 

Leider liefert die 64-Bit-Installation von Oracle nur die 64-Bit-ODBC-Komponenten mit. Den 32-Bit-Client mit den 32-Bit-ODBC-Komponenten muss man separat runterladen.

 

Hierbei muss man beachten: die sqora32.dll, die für den 32-Bit-ODBC-Treiber zuständig ist (die 64-Bit-Version lautet übrigens genauso) wurde bei mir vom Installer in das falsche Verzeichnis geschrieben. Im Server-Verzeichnis ist die 64-Bit-Version davon im Unterverzeichnis /bin/ gelandet. Der Client-Installer hatte dagegen die Verzeichnisstruktur nochmal angelegt (den InstantClient hatte ich nicht benutzt, sondern eine größere Version), aber diese dll dann nicht in das Bin-Unterverzeichnis abgelegt, sondern eine Verzeichnisebene darüber. Dadurch hatte diese dll dann das Network/Admin-Verzeichnis mit der tnsnames.ora nicht mehr gefunden (wird zur Namensauflösung benutzt). Zu beachten ist auch, das wenn er die tnsnames.ora nicht findet keine korrekte Meldung ausgibt sondern "TNS: No Listener".

 

In der sqora32.dll scheint sowas drinzustehen:

 

$Variable = '../Network/Admin/tnsnames.ora'

 

Das bedeutet die sqora32.dll sucht von ihrem eigenen Standort aus gesehen einen Pfad nach oben (../), dann im Unterverzeichnis Network, dann im Unterverzeichnis Admin nach der tnsnames.ora.

 

Das Verzeichnis /Network/Admin existierte zwar im Client-Verzeichnis, jedoch hatte der Client-Installer auch nicht die tnsnames.ora in das Verzeichnis kopiert (zweiter Fehler). Wenn Oracle Client und Server auf dem selben Rechner installiert werden, braucht er die tnsnames.ora auch zweimal - oder, man kopiert diese dlls direkt in das Server-Verzeichnis, das könnte dann aber Schwierigkeiten machen weil die 32-Bit und 64-Bit-dlls vom Dateinamen her gleich benannt sind, wie gesagt. Das in der Windows-PATH-Variable die 32-Bit-Komponenten vor den 64-Bit-Komponenten gesucht wurden hatte übrigens nicht geholfen. Die sqora32.dll scheint NUR über diesen relativen Pfad nach der tnsnames.ora zu suchen.

 

Die 64-Bit-ODBC-Einträge findet man bei Vista64 in der Registry über

 

HKEY_LOCAL_MACHINE/SOFTWARE/ODBC

 

Die 32-Bit-ODBC-Einträge dagegen unter

 

HKEY_LOCAL_MACHINE/SOFTWARE/WOW6432Node/ODBC

 

Bei mir gehts nun jedenfalls mit dem 32-Bit-ODBC-Zugriff auf eine 64-Bit-Oracle-Datenbank, nachdem ich das Network/Admin-Verzeichnis nochmal angelegt und die tnsnames.ora-Datei dahin kopiert hatte.

 

Danke übrigens an Torsten, der mir die 32/64-Bit Unterschiede bei Vista64 in dieser Beziehung erklärt hat. Ich habe mich bestimmt eine ganze Woche damit beschäftigt. Leider habe ich mir nicht das Installationspaket gemerkt mit dem ich es hinbekommen hatte, bei Oracle gibts ja mehrere zum Download.

 

Monats-Liste