RedHat 7 msodbcsql17-Probleme

RedHat 7 msodbcsql17-Probleme

Ich habe dies ursprünglich auf StackOverflow gefragt, aber meiner Meinung nach ist es kein Anwendungsentwicklungsproblem. Im Grunde habe ich eine C++-Anwendung, die sich über das Paket msodbcsql17 mit SQL Server verbindet. Sie läuft auf einem Linux-Server mit RedHat 7. Beim Bereitstellen dieser Anwendung in einer neuen Umgebung haben die lokalen Administratoren das neueste verfügbare Paket msodbcsql17 mit yum installiert, nämlich 17.6.1.1-1. Unsere Anwendung bleibt beim Verbinden mit der Datenbank hängen, systemctl kann sie nicht stoppen, sondern nur durch Beenden nach einiger Zeit. Ich habe es in unserem Labor überprüft, die Anwendung funktioniert einwandfrei mit msodbcsql17 Version 17.4.2.1.1-1. Also habe ich die Versionen getestet, indem ich einen unserer Laborserver genommen, ihn geklont und überprüft habe, dass die Anwendung auf beiden einwandfrei funktioniert. Ich habe einen der Server auf Version 17.6 von msodbcsql17 aktualisiert, die Anwendung stürzte „wie erwartet“ ab. Also habe ich sie auf Version 17.4 heruntergestuft, und die Anwendung funktioniert immer noch nicht.

Soweit ich das beurteilen kann, sind die installierten Binärdateien (alles im Ordner /opt/microsoft) auf beiden Servern gleich. Ansonsten kann ich nur einen einzigen symbolischen Link von /usr/lib64 sehen, der auf eine SO-Datei in /opt/microsoft verweist. Laut yum wurden keine anderen Abhängigkeiten installiert oder entfernt. Ich habe dies überprüft, indem ich „yum list installed“ in eine Datei exportiert und sie per Diff verglichen habe.

Also habe ich versucht, mit rsync Dateien vom ursprünglichen Arbeitsserver auf den neuen Server zu kopieren. Ich habe zunächst nur Probeläufe durchgeführt, aber keinen Unterschied festgestellt. Also habe ich den gesamten /usr-Ordner kopiert, was immer noch nicht funktionierte. Dann habe ich den gesamten /etc-Ordner mit rsync kopiert, den Hostnamen und die IP-Konfiguration zurückgesetzt (offensichtlich wurden diese Dateien auch überschrieben) und die App funktionierte wieder. Also habe ich es wieder kaputt gemacht, indem ich die neueste Version von msodbcsql17 installiert, diese entfernt und die vorherige Version installiert habe, und einen weiteren Probelauf mit rsync durchgeführt. Im usr-Ordner gibt es keine Unterschiede, rsync protokolliert nur, dass es symbolische Links überspringt (nicht reguläre Datei „tmp“ überspringt). Im etc-Ordner gab es jedoch einige Unterschiede, und ich kann beim besten Willen nicht erkennen, welche Datei hier problematisch ist:

sudo rsync -r --dry-run --out-format="[%t]:%o:%f:Last Modified %M" [email protected]:/etc/ /etc/ | less

[2020/12/16 00:59:54]:recv:hostname:Last Modified 2019/11/07-17:10:40
[2020/12/16 00:59:54]:recv:ld.so.cache:Last Modified 2020/12/16-00:40:20
[2020/12/16 00:59:54]:recv:odbcinst.ini:Last Modified 2019/11/27-17:03:27
[2020/12/16 00:59:54]:recv:sysconfig/network-scripts/ifcfg-ens160:Last Modified 2019/11/07-17:09:02
[2020/12/16 00:59:54]:recv:tuned/active_profile:Last Modified 2020/09/15-09:51:08
[2020/12/16 00:59:54]:recv:tuned/profile_mode:Last Modified 2020/09/15-09:51:08

/etc/hostname und /etc/sysconfig/network-scripts/ifcfg-ens160 sind offensichtlich unterschiedlich. /etc/odbcinst.ini wurde während der Installation von msodbcsql17 neu generiert, aber der Inhalt ist laut Diff derselbe. Was den Rest betrifft, ist der Inhalt laut Diff wieder derselbe. Nun, außer ld.so.cache, das binär ist, aber eine andere Größe hat, habe ich diese Datei manuell kopiert und es hat das Problem nicht gelöst.

Ich bin mir also nicht sicher, was das Problem hier genau behebt. Das Interessanteste daran: Wenn ich den Ordner /etc mit der neuesten installierten Version von msodbcsql17 per Rsync synchronisiere, funktioniert die App wieder. Also fast so, als ob etwas im Ordner /etc kaputtgeht?

Antwort1

Ok, nach einigen ausführlicheren Überprüfungen scheint es, als hätte ich die allererste übersehen: odbcinst.ini ist tatsächlich anders! Während der 17.6 msodbc-Installation wurde eine Zeile entfernt. Nachdem ich sie erneut hinzugefügt hatte, funktionierte sie sofort:

odbcinst.ini

Warum diese Zeile entfernt wurde, weiß ich nicht. Oder diese Zeile wurde bei einer Neuinstallation nie zu odbcinst.ini hinzugefügt. Wie auch immer, jetzt funktioniert es.

verwandte Informationen