
最初は 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 フォルダーで何かが壊れているような感じでしょうか?