This article is contributed. See the original author and article here.

こんにちは。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


※ バージョン(12)やインスタンス ID(SQLEXPRESS)により上記パスは異なります。適宜読み替えてください。


 


■回避策
上記条件に該当する環境にて、x86 版 SQL Server の更新プログラムを適用する際、適用前に「C:WindowsSysWOW64」に「SQSRVRES.DLL」がある場合には、削除を行ってください。
また、更新プログラムを続けて複数インストールする場合には、インストールした更新プログラムで「C:WindowsSysWOW64SQSRVRES.DLL」にファイルを配置する可能性があるため、各インストールごとに上記ファイルの削除の手順を実施ください。
※ SQL Server の更新プログラムはサービスパックごとに累積型となっており、適用予定の更新プログラムのうち最新の更新プログラムを適用するのみで、対処可能ですので、併せてご検討ください。


 


既に「C:WindowsSystem32sqsrvres.dll」が置き換わってしまっている場合や、更新プログラムが多くあり上記回避策が難しい場合には、x64 版 SQL Sever のインストール フォルダーの「Binn」フォルダーより「SQSRVRES.DLL」を、「C:Windowssystem32」へ、コピーすることで対処できます。


 


例)
コピー元: C:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERMSSQLBinn
コピー先: C:Windowssystem32


 


※ バージョン(15)やインスタンスID(MSSQLSERVER)により上記パスは異なります。適宜読み替えて下さい。
※ファイルが使用中で置き換えられない場合、クラスター サービスを停止する必要があります。まずは、パッシブノードから実施することをご検討ください。


 


以上となります。

Brought to you by Dr. Ware, Microsoft Office 365 Silver Partner, Charleston SC.