RedHat 7 msodbcsql17 の問題

RedHat 7 msodbcsql17 の問題

最初は StackOverflow で質問しましたが、これはアプリケーション開発の問題ではないと思います。基本的に、msodbcsql17 パッケージを使用して SQL Server に接続する C++ アプリケーションがあります。これは RedHat 7 Linux サーバーで実行されています。このアプリケーションを新しい環境に展開するときに、ローカル管理者が yum を使用して最新の msodbcsql17 パッケージ (17.6.1.1-1) をインストールしました。DB に接続するとアプリケーションがハングし、systemctl では停止できず、しばらくしてから強制終了するしかありません。ラボで確認したところ、アプリケーションは msodbcsql17 バージョン 17.4.2.1.1-1 で正常に動作しています。そこで、ラボ サーバーの 1 つを取得してクローンを作成し、両方でアプリケーションが正常に動作することを確認してバージョンをテストしました。サーバーの 1 つを msodbcsql17 の 17.6 バージョンにアップグレードしたところ、アプリケーションは「予想どおり」動作しなくなりました。そこで 17.4 バージョンにダウングレードしましたが、アプリケーションはまだ動作しません。

私の知る限り、インストールされたバイナリ (/opt/microsoft フォルダー内のすべて) は 2 つのサーバーで同じです。これ以外には、/opt/microsoft 内の SO ファイルを指す /usr/lib64 からの 1 つのシンボリック リンクのみ確認できます。yum によると、他の依存関係はインストールまたは削除されていません。これを確認するために、「yum list installed」をファイルにエクスポートし、diff で比較しました。

そこで試したのは、rsync を使用して元の動作サーバーから新しいサーバーにファイルをコピーすることです。最初は単にドライ ランを実行しましたが、違いは見つかりませんでした。そこで /usr フォルダー全体をコピーしましたが、それでも動作しません。次に、rsync を使用して /etc フォルダー全体をコピーし、ホスト名と IP 構成を元に戻しました (当然、これらのファイルも上書きされました)。すると、アプリは再び動作するようになりました。そこで、最新バージョンの msodbcsql17 をインストールし、それを削除して以前のバージョンをインストールすることで、再びアプリを壊し、もう一度 rsync ドライ ランを実行しました。usr フォルダーでは違いはなく、rsync はシンボリック リンクをスキップしている (通常以外のファイル "tmp" をスキップしている) ことのみをログに記録します。ただし、etc フォルダーではいくつかの違いがあり、ここで問題のあるファイルが何であるかはわかりません。

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 と /etc/sysconfig/network-scripts/ifcfg-ens160 は明らかに異なります。/etc/odbcinst.ini は msodbcsql17 のインストール中に再生成されましたが、diff によると内容は同じです。残りについても、diff によると内容は同じです。バイナリですがサイズが異なる ld.so.cache を除いて、このファイルを手動でコピーしましたが、解決しませんでした。

したがって、ここで問題が正確に何が解決されるのかはわかりません。最も興味深いのは、最新の msodbcsql17 がインストールされた /etc フォルダーを rsync すると、アプリが再び動作し始めることです。つまり、/etc フォルダーで何かが壊れているような感じでしょうか?

答え1

わかりました。さらに詳しく調べたところ、最初の 1 つを見逃していたようです。odbcinst.ini は実際には異なります。17.6 msodbc のインストール中に、1 行が削除されました。それを再度追加すると、すぐに動作するようになりました。

odbcinst.ini

この行が削除された理由はわかりません。または、新規インストールの場合、この行は odbcinst.ini に追加されませんでした。とにかく、今は動作します。

関連情報