適用対象:SQL Server
この記事では、次の問題に関する情報を提供します。
- 基本的なトラブルシューティング手順
- フェールオーバー クラスターの障害からの復旧
- 最も一般的なフェールオーバー クラスタリングの問題を解決する
- 拡張ストアド プロシージャと COM オブジェクトを使用する
基本的なトラブルシューティングの手順
診断の最初の手順では、新しいクラスターの検証チェックを実行します。 検証の詳細については、「フェールオーバー クラスターを作成する」のページの「構成の検証」を参照してください。 これは、オンライン クラスター リソースに影響しないため、サービスを中断することなく完了できます。
フェールオーバー クラスタ リング機能をインストールしたら、クラスターの展開前、クラスターの作成中、クラスターの実行中を含め、いつでも検証を実行することができます。 実際、クラスターが使用されると、追加のテストが実行されます。このテストでは、高可用性ワークロードのベスト プラクティスに従っていることを確認します。 これらの数十のテスト全体で、クラスター ワークロードの実行に影響を与えるテストはごくわずかであり、これらはすべてストレージ カテゴリ内であるため、このカテゴリ全体をスキップすると、破壊的なテストを回避する簡単な方法です。
フェールオーバー クラスタリングには、検証中にストレージ テストを実行するときの偶発的なダウンタイムを防ぐためのセーフガードが組み込まれています。 検証が開始されたときにクラスターにオンライン グループがあり、ストレージ テストが選択されたままの場合は、すべてのテストを実行する (およびダウンタイムを引き起こす) か、ダウンタイムを回避するためにオンライン グループのディスクのテストをスキップするかをユーザーに確認するように求められます。 ストレージ カテゴリ全体がテスト対象から除外された場合、このプロンプトは表示されません。 これにより、ダウンタイムなしでクラスターの検証が可能になります。
クラスターを再検証する方法
フェールオーバー クラスター スナップインのコンソール ツリーで、 フェールオーバー クラスター管理 が選択されていることを確認し、[ 管理] で [ 構成の検証] を選択します。
ウィザードの指示に従って、サーバーとテストを指定し、テストを実行します。 テストの実行後、 [概要] ページが表示されます。
[概要] ページで、[レポートの表示] を選択してテスト結果を表示します。
ウィザードを閉じた後にテストの結果を表示するには、オペレーティング システムがインストールされているフォルダー (
%SystemRoot%\Cluster\Reports\Validation Report date and time.htmlなど)%SystemRoot%C:\Windows参照してください。結果の解釈に役立つヘルプ記事を表示するには、[ クラスター検証テストの詳細] を選択します。
ウィザードを閉じた後にクラスターの検証に関するヘルプ記事を表示するには、フェールオーバー クラスター スナップインで、[ ヘルプ] を選択し、[ ヘルプ トピック] を選択し、[ コンテンツ ] タブを選択し、フェールオーバー クラスター のヘルプの内容を展開して、[ フェールオーバー クラスター構成の検証] を選択します。 検証ウィザードが完了すると、 [概要レポート] に結果が表示されます。 すべてのテスト結果が緑色のチェック マーク、または場合によっては黄色の三角形 (警告) になる必要があります。 問題領域 (赤い X または黄色の疑問符) を探す場合は、テスト結果を要約したレポートの部分で、個々のテストを選択して詳細を確認します。 赤い X の問題は、SQL Server の問題をトラブルシューティングする前に解決する必要があります。
の更新プログラムをインストールする
更新プログラムのインストールは、システムの問題を防ぐために重要です。 役に立つリンク:
- Windows Server 2012 R2 ベースのフェールオーバー クラスターの推奨される修正プログラムと更新プログラム
- Windows Server 2012 ベースのフェールオーバー クラスターの推奨される修正プログラムと更新プログラム
- Windows Server 2008 R2 ベースのフェールオーバー クラスターの推奨される修正プログラムと更新プログラム
- Windows Server 2008 ベースのフェールオーバー クラスターの推奨される修正プログラムと更新プログラム
フェールオーバー クラスターの障害からの復旧
フェールオーバー クラスター障害の一般的な原因は、次の 2 つのいずれかです。
2 ノード クラスターのいずれかのノードでハードウェア障害が発生しています。 このハードウェア障害は、SCSI カードまたはオペレーティング システムの障害によって発生する可能性があります。
この障害から復旧するには、 SQL Server セットアップ プログラムを使用して、障害が発生したノードをフェールオーバー クラスターから削除し、コンピューターをオフラインにしてハードウェアの障害を処置し、コンピューターを再び起動します。その後、修復されたノードをフェールオーバー クラスター インスタンスに追加します。
詳細については、「 新しい Always On フェールオーバー クラスター インスタンスの作成 (セットアップ) 」および「 フェールオーバー クラスター インスタンスの障害からの復旧」を参照してください。
オペレーティング システムの障害が発生しています。 この場合、ノードはオフラインですが、取り返しのつかないほど壊れていません。
オペレーティング システムの障害から復旧するには、ノードを復旧してフェールオーバーをテストします。 SQL Server インスタンスが正常にフェールオーバーされない場合は、SQL Server セットアップ プログラムを使用して、フェールオーバー クラスターから SQL Server を削除し、必要な修復を行い、コンピューターをバックアップしてから、修復されたノードをフェールオーバー クラスター インスタンスに追加し直す必要があります。
この方法でオペレーティング システムの障害から復旧すると、時間がかかる場合があります。 オペレーティング システムの障害から簡単に復旧できる場合には、この方法は使用しないでください。
詳細については、「 新しい Always On フェールオーバー クラスター インスタンスの作成 (セットアップ) 」および「 フェールオーバー クラスター インスタンスの障害からの復旧」を参照してください。
一般的な問題を解決する
次に、一般的な使用上の問題とその解決策を示します。
問題: SQL Server をインストールするコマンド プロンプト構文の使用方法が正しくない
問題 1: コマンド プロンプトから /qn スイッチを使用すると、 /qn スイッチによってすべてのセットアップ ダイアログ ボックスとエラー メッセージが表示されなくなっているため、セットアップの問題を診断することは困難です。
/qn スイッチを指定すると、エラー メッセージを含むすべてのセットアップ メッセージがセットアップ ログ ファイルに書き込まれます。 ログ ファイルの詳細については、「 SQL Server セットアップ ログ ファイルの表示と読み取り」を参照してください。
解決策 1: /qb スイッチではなく、/qn スイッチを使用します。
/qb スイッチを使用すると、エラー メッセージを含む各ステップの基本的な UI が表示されます。
問題: SQL Server を別のノードに移行した後にネットワークに接続できない
現象 1: SQL Server サービス アカウントがドメイン コントローラーと通信できません。
解決策 1: アダプターの障害や DNS の問題など、ネットワークに関する問題の兆候をイベント ログで確認します。 ドメイン コントローラーに対して ping を実行できることを確認します。
問題 2: SQL Server サービス アカウントのパスワードは、すべてのクラスター ノードで同じとは限りません。または、ノードが、障害が発生したノードから移行された SQL Server サービスを再起動しません。
解決策 2: SQL Server 構成マネージャーを使用して SQL Server サービス アカウントのパスワードを変更します。 変更せず、1 つのノードで SQL Server サービス アカウントのパスワードを変更する場合は、他のすべてのノードのパスワードも変更する必要があります。 SQL Server 構成マネージャーを使用すると、この操作が自動的に行われます。
問題: SQL Server がクラスター ディスクにアクセスできない
問題 1: ファームウェアまたはドライバーは、すべてのノードで更新されるわけではありません。
解決策 1: すべてのノードで正しいファームウェアのバージョンおよび同じドライバーのバージョンを使用していることを確認します。
問題 2: ノードは、別のドライブ文字を持つ共有クラスター ディスク上の障害が発生したノードから移行されたクラスター ディスクを回復できません。
解決策 2: クラスター ディスクのディスク ドライブ文字は、両方のサーバーで同じである必要があります。 インストールされていない場合は、オペレーティング システムと Microsoft Cluster Service (MSCS) の元のインストールを確認します。
問題: SQL Server サービスの障害によりフェールオーバーが発生する
解決策 : 特定のサービスの障害による SQL Server グループのフェールオーバーを回避するには、Windows のクラスター アドミニストレーターを使用してサービスを次のように構成します。
- [フルテキストのプロパティ] ダイアログ ボックスの [詳細設定] タブで、 [グループに適用する] チェック ボックスをオフにします。 ただし、 SQL Server によりフェールオーバーが発生した場合は、フルテキスト検索サービスが再起動します。
問題: SQL Server が自動的に起動しない
解決策: フェールオーバー クラスターを自動的に起動するには、MSCS でクラスター アドミニストレーターを使用します。 SQL Server サービスは手動で開始するように設定されています。クラスター アドミニストレーターは MSCS で SQL Server サービスを開始するように構成されています。 詳細については、「 サービスの管理」を参照してください。
問題: ネットワーク名がオフラインで、TCP/IP を使用して SQL Server に接続できない
問題点 1: DNS 必須に設定されているクラスター リソースで DNS が失敗します。
解決策 1: DNS の問題を修正します。
問題点 2: ネットワーク上に重複する名前があります。
解決策 2:nbtstat を使用して重複する名前を見つけ、問題を修正します。
問題 3: SQL Server は名前付きパイプを使用して接続していません。
解決策 3: 名前付きパイプで接続するには、SQL Server 構成マネージャーを使用して別名を作成し、適切なコンピューターに接続します。 たとえば、2 つのノード (Node A および Node B) から成るクラスター、および既定のインスタンスを使用するフェールオーバー クラスター インスタンス (Virtsql) がある場合、次の手順に従って、オフラインのネットワーク名リソースがあるサーバーに接続できます。
クラスター アドミニストレーターを使用して、 SQL Server インスタンスを含むグループが実行されているノードを特定します。 この例では、 ノード A です。
SQL Server net start を使用して、そのコンピューターのサービスを開始します。 net startの使用方法については、「 手動による SQL Server の起動」を参照してください。
Node A で SQL Server SQL Server 構成マネージャーを起動します。サーバーがリッスンしているパイプ名を確認します。
\\.\$$\VIRTSQL\pipe\sql\queryのようになります。クライアント コンピューターで、SQL Server 構成マネージャーを起動します。
名前付きパイプを介してこのパイプ名に接続するエイリアス
SQLTEST1を作成します。 これを行うには、サーバー名として 「ノード A 」と入力し、\\.\pipe\$$\VIRTSQL\sql\queryするパイプ名を編集します。エイリアス
SQLTEST1をサーバー名として使用して、このインスタンスに接続します。
問題: クラスターでエラー 11001 が発生して SQL Server セットアップが失敗する
問題:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.X\Cluster の孤立したレジストリ キー。
解決:MSSQL.X レジストリ ハイブが現在使用されていないことを確認し、クラスター キーを削除します。
問題: クラスター セットアップ エラー: "インストーラーにはディレクトリ <drive>\Microsoft SQL Server にアクセスするための十分な特権がありません。 インストールを続行できません。 管理者としてログオンするか、システム管理者に連絡してください。
発行: このエラーは、SCSI 共有ドライブが正しくパーティション分割されていないことが原因で発生します。
解決: 次の手順を使用して、共有ディスク上に 1 つのパーティションを再作成します。
- クラスターからディスク リソースを削除します。
- ディスクのすべてのパーティションを削除します。
- ディスクのプロパティで、ディスクが基本ディスクになっていることを確認します。
- 共有ディスクにパーティションを 1 つ作成し、ディスクをフォーマットして、ドライブ文字を割り当てます。
- クラスター アドミニストレーター (cluadmin) を使用してディスクをクラスターに追加します。
- SQL Server セットアップを実行します。
問題: アプリケーションで SQL Server リソースを分散トランザクションに参加させることができない
発行: Microsoft 分散トランザクション コーディネーター (MS DTC) は Windows で完全に構成されていないため、アプリケーションが分散トランザクションに SQL Server リソースを参加させることに失敗する可能性があります。 この問題は、分散トランザクションを使用するリンク サーバー、分散クエリ、およびリモート ストアド プロシージャに影響することがあります。 MS DTC を構成する方法の詳細については、「 Before Installing Failover Clustering」を参照してください。
解決策: このような問題を回避するには、SQL Server をインストールして MS DTC を構成したサーバーで、MS DTC サービスを完全に有効にする必要があります。
MS DTC を完全に有効にするには、次の手順を実行します。
コントロール パネルで、 [管理ツール] を開き、 [コンピューターの管理] を開きます。
[コンピューターの管理] の左側のウィンドウで、[ サービスとアプリケーション] を展開し、[ サービス] を選択します。
[コンピューターの管理] の右ペインで、 [Distributed Transaction Coordinator] を右クリックし、 [プロパティ] をクリックします。
[ 分散トランザクション コーディネーター ] ウィンドウで、[ 全般 ] タブを選択し、[ 停止 ] を選択してサービスを停止します。
[ 分散トランザクション コーディネーター ] ウィンドウで、[ ログオン ] タブを選択し、ログオン アカウントを
NT AUTHORITY\NetworkService設定します。[ 適用 ] と [OK] を 選択して、[ 分散トランザクション コーディネーター ] ウィンドウを閉じます。 [コンピューターの管理] ウィンドウを閉じます。 [管理ツール] ウィンドウを閉じます。
問題:SQL Server エージェントがカスタムポート上のマルチサブネットフェイルオーバークラスターインスタンスに接続できません
問題:SQL Server エージェントは、以下の条件すべてが当てはまる場合、ローカルデータベース エンジンに接続できません。
- SQL Serverはマルチサブネットのフェイルオーバークラスタインスタンスとしてインストールされています。
- フェイルオーバークラスターインスタンスはデフォルトのインスタンスです。
- データベース エンジンはデフォルトの1433ポート以外の固定TCPポートで受信します。
- SQL Server エージェントは起動時にローカルインスタンスに接続します。
マルチサブネットのフェイルオーバークラスターインスタンスの場合、最初のSQL Server エージェント接続はMultiSubnetFailover=Yesを使用します。 この設定によりクライアントはTCPを使用します。 接続は共有メモリや名前付きパイプにフォールバックしません。 ターゲットが (local) されポートが指定されていない場合、接続はTCPポート1433を試みます。 データベース エンジンがそのポートを受信していないと接続が失敗します。
ODBCトレースで次のようなつながりが見られるかもしれません:
DRIVER=ODBC Driver 17 for SQL Server;SERVER=(local);APP=SQLAgent - Initial Boot Probe;DATABASE=master;MultiSubnetFailover=YES;
解決方法:SQL Server エージェント接続をフェイルオーバークラスタインスタンスの仮想ネットワーク名と設定済みTCPポートに誘導するTCPエイリアスを作成します。 フェイルオーバークラスタインスタンスをホストできるすべてのノードでエイリアスを設定してください。
ステップ1:設定済みのTCPポートを確認する
- アクティブなノードでSQL Server 構成マネージャーを開きます。
- SQL Serverネットワーク構成を展開し、MSSQLSERVERのプロトコルを選択します。
- TCP/IPを開き、IPアドレスタブを選択してください。
- Listen Allが「Yes」に設定されている場合、IPAllのTCPポートの値に注目してください。
- Listen Allが「No」に設定されている場合、フェイルオーバークラスターインスタンスで使用されている各有効IPアドレスのTCPポート値を確認します。
- SQL Serverのエラーログでデータベース エンジンが期待されたポートを受信していることを確認しましょう。
詳しくは、「特定の TCP ポートでリッスンするように SQL Server を構成する」を参照してください。
ステップ2:すべてのクラスタノードでTCPエイリアスを作成します
フェイルオーバークラスターインスタンスをホストできるすべてのノードで以下のステップを行ってください:
- インストールされているSQL Serverバージョンに適用されるSQL Serverクライアントエイリアス設定ツールを開きます。
- 新しい別名を作成してください。
- エイリアス名にローカルSQL Server エージェント接続の一意名を入力します。 すべてのノードで同じエイリアス名を使いましょう。
- TCP /IP をプロトコルとして選択してください。
- サーバーでフェイルオーバークラスターインスタンスの仮想ネットワーク名を入力します。 物理ノード名は入力しないでください。
- ポート番号に、ステップ1で特定した固定TCPポートを入力します。
- 偽名は取っておけ。
詳細な手順やバージョン要件については、「 クライアントが使用するサーバーエイリアスを作成または削除する」をご覧ください。
Important
SQL Serverエイリアスはクライアント構成です。 フェイルオーバークラスターインスタンスを所有できるすべてのノードで同一のエイリアスを作成します。 そうでなければ、インスタンスがエイリアスが設定されていないノードに移動した後にSQL Server エージェントが失敗する可能性があります。
ステップ3:SQL Server エージェントにエイリアスを使用するよう設定する
- SQL Server Management Studioでフェイルオーバークラスタインスタンスに接続します。
- オブジェクト エクスプローラーでインスタンスを展開します。
- SQL Server エージェントを右クリックし、プロパティを選択します。
- 「 ページ選択」の「 接続」を選択します。
- Aliasローカルホストサーバーで、ステップ2で作成したエイリアス名を入力します。
- [OK] を選択.
- SQL Server エージェントを再起動します。
詳しくは、「SQL Server エージェント サービスの SQL Server エイリアスを設定する」をご覧ください。
ステップ4:設定の検証
- SQL Server エージェントが正常に起動しているか確認してください。
- SQL Server エージェントログを確認し、そのエージェントが意図したローカルデータベース エンジンインスタンスに接続されているか確認してください。
- 簡単なSQL Server エージェントジョブを実行して、ジョブがインスタンスに接続できるか確認します。
- 通常の業務活動に支障が出ないタイミングで、フェイルオーバークラスターインスタンスを別の所有者ノードに移動させてください。
- SQL Server エージェントが起動し、テストジョブがそのノードで成功しているかを確認します。
- すべての可能な所有者ノードについてテストを繰り返します。
拡張ストアド プロシージャと COM オブジェクトを使用する
フェールオーバー クラスタリング構成で拡張ストアド プロシージャを使用する場合、 SQL Serverに依存するクラスター ディスク上にすべての拡張ストアド プロシージャをインストールする必要があります。 これは、ノードがフェールオーバーしても拡張ストアド プロシージャを使用できるようにするためです。
拡張ストアド プロシージャで COM コンポーネントが使用される場合、管理者はその COM コンポーネントをクラスター内の各ノードに登録する必要があります。 COM コンポーネントを作成するには、COM コンポーネントを読み込んで実行するための情報をアクティブなノードのレジストリに格納する必要があります。 この場所に格納しないと、その情報は COM コンポーネントを最初に登録したコンピューターのレジストリに残ります。