こんにちは。SQL Server サポート チームです。
今回は1つの OS 上に SQL Server x64 版 と x86 版が両方インストールされており、x64 版でフェールオーバークラスターインスタンス(以下、FCI)を構成している環境に対して、x86 版の更新プログラムを適用した場合に発生する問題について説明します。
本現象が発生すると、FCI 構成の SQL Server の役割を移動(フェールオーバー)する際に失敗しますので、発生した場合は後述する回避策を実施ください。
■概要
任意のバージョンの SQL Server x64 版と、x86 版を両方インストールしている環境に、x86 版の更新プログラムを適用した場合、FCI で使用する x64 版用の DLL ファイルが、意図せず x86 版用の DLL ファイルで置き換えられてしまう事があります。
具体的には、x86 版の更新プログラムの動作により、本来 x86 版用の「C:WindowsSysWOW64SQSRVRES.DLL」を置き換えるべきところが、誤って x64 版用の「C:WindowsSystem32sqsrvres.dll」を置き換えてしまうことによって発生します。
なお、「C:WindowsSystem32sqsrvres.dll」や「C:WindowsSysWOW64SQSRVRES.DLL」は、FCI 構成において、役割の移動時などリソースの操作や管理に使用されるライブラリです。
■影響
x64 版の SQL Server にて FCI を構成している環境において本現象が発生すると、「C:WindowsSystem32sqsrvres.dll」がx86 版用のファイルで置き換えられたノードに SQL Server の役割を移動(フェールオーバー)させようとすると、エラーとなり役割の移動(フェールオーバー)や起動が行えません。
■発生条件
以下の条件を全て満たす場合に発生します。
・SQL Server(x64)の任意のバージョンで FCI 構成をしているインスタンスが存在する。
・SQL Server(x86)のインスタンスが存在する。
※ SQL Server 2016 以降 64ビット OS で 32ビットで稼働する WOW64 のサポートが終了しているため、SQL Server 2014 以前が対象となります。
・C:WindowsSysWOW64 フォルダーに SQSRVRES.DLL が存在する。
■問題が発生する手順
・SQL Server(x86) のインスタンスに更新プログラムを適用します。
■発生状況の確認方法
「C:WindowsSystem32sqsrvres.dll」が、下記例のようなパスに格納される x86 版のファイルと同じであれば、本現象が発生していると判断できます。
同じか否かは、ファイルのプロパティを開き、[詳細] タブから [製品バージョン] を比較することが可能です。
(x86 版の sqsrvres.dll の格納先例)
C:Program Files (x86)Microsoft SQL ServerMSSQL12.SQLEXPRESSMSSQLBinnSQSRVRES.DLL