前回、クラスター環境の SQL Server をシングルユーザーモードで起動 という投稿を書きました。
この投稿ではクラスターのサービス (Cluster Service) が起動した状態が前提となっていました。
今回はクラスターのサービスが起動しない状態になった場合に、クラスター環境の SQL Server を起動するための手順をまとめてみたいと思います。
# かなり無理やり起動させていますので、実施する場合は自己責任でお願いいたします。
本作業は 2 ノードクラスターで構成された環境で、1 ノードのみ起動した状態で実施しています。
■クラスターから共有ディスクの制御を外す
最初に共有ディスクをクラスターの制御下 (正確には Cluster Disk Driver の制御下でしょうか) から外す必要があります。
クラスターのサービスが停止している状態でも、クラスターの共有ディスクとして認識させたディスクは [予約] の状態となり、[オンライン] にすることができません。
クラスター環境のディスクをローカルのディスクとしてオンラインにするためにはデバイスマネージャーから [Cluster Disk Driver] を [無効] にする必要があります。
このドライバーを無効にしたらサーバーを再起動します。
Cluster Disk Driver を無効にすると [予約] の状態が解除されますので、通常のディスクのように [オンライン] にすることが可能となります。
SQL Server に必要なディスクを順次オンラインにし、ローカルのディスクとして認識させます。
■SQL Server のサービスの起動
ローカルディスクとして認識させることができたら、SQL Server のサービスを起動してみます。
起動の状態がわかりやすいようにサービスに設定されている [実行ファイルのパス] をコマンドプロンプトから実行しています。
# 管理者として実行しているコマンドプロンプトでないと [指定されたパスが見つかりません] のエラーになると思います。
実行するとコマンドプロンプト上にログが出力され、起動のステップが実行されるのですが最終的にはエラーとなりサービスを起動することができない状態になると思います。
ログを眺めると少し見えてくるのですが、クラスター環境の SQL Server として認識がされているため、クラスターのリソース (ネットワーク名と IP アドレス) が認識できずにエラーとなってしまっているようです。
では、クラスターのサービスが起動していないとクラスター環境の SQL Server は起動できないかというと、レジストリを書き換えて、クラスター環境ではないと認識させてしまえば起動することができます。
具体的には以下のレジストリーのキーの名称をリネームしてしまいます。
[HKLMSOFTWAREMicrosoftMicrosoft SQL Server<インスタンスのキー>Cluster]
このキーを一度 [_Cluster] 等 [Cluster] 以外の名前にリネームしてしまいます。
それではこの状態で先ほどと同じ方法で SQL Server を起動してみます。
レジストリのキーを変更した状態であれば、クラスターサービスが停止している状態でクラスター環境の SQL Server を起動することが可能です。
作業が終了したら、[Cluster Disk Driver] を有効にして、リネームしたレジストリの [Cluster] のキーの名称を戻せばクラスターで起動可能な状態になります。
どうしてもクラスターなしで起動せざるを得ない時以外はこの方法は使わないと思いますが…。
[…] […]
スタンドアロンインスタンスの SQL Server をクラスターインスタンスの SQL Server に移行 « SE の雑記
5 8月 12 at 20:16