SQL Server Always Onの問題のトラブルシューティング
この記事は、SQL Serverでの構成に関する一般的な問題Always On解決するのに役立ちます。
注:
この記事のガイド付きチュートリアルについては、「SQL Server Always Onの問題のトラブルシューティング」を参照してください。
元の製品バージョン: SQL Server 2012 Enterprise、SQL Server 2014 Enterprise、SQL Server 2016 Enterprise
元の KB 番号: 10179
重要事項
Microsoft CSS データは、顧客の問題のかなりの割合がリリースされた CU で以前に対処されることが多いが、事前に適用されていないことを示しているため、利用可能になったときに継続的でプロアクティブな CU をインストールすることをお勧めします。 詳細については、「SQL Server増分サービス モデル (ISM) の更新プログラムの発表」を参照してください。
バージョンで使用できる最新の CU をチェックするには、「SQL Serverとそのコンポーネントのバージョン、エディション、および更新レベルを決定する方法」を参照してください。
さまざまな種類の問題の診断や可用性グループの監視に使用できるツールの詳細については、「可用性グループのトラブルシューティングと監視Always On可用性グループのトラブルシューティングと監視に役立つツール」Always On参照してください。 このガイドには、このガイド付きチュートリアルでは取り上げられない可能性がある追加のシナリオもあります。
Always On可用性グループのドキュメントの親ノードと、さまざまな質問のワンストップ リファレンスを提供します。「可用性グループのAlways On (SQL Server)」を参照してください。
可用性グループの設定と構成に関するポインター Always On必要です
Always On構成の設定に関するドキュメントをお探しの場合は、次のドキュメントを参照してください。
Always On可用性グループ (SQL Server) を使用したはじめに - このドキュメントでは、可用性グループとセットアップに関する多くの質問に対する回答を提供します。 この記事のすべての手順に従い、Always On可用性グループ (SQL Server) の前提条件、制限、推奨事項を確認すると、環境内の可用性グループの設定と保守に関して発生する可能性のある多くの問題を防ぐことができます。
その他のリソース
- ステップ バイ ステップ: SQL Server 2012 Always On 可用性グループの作成
- Always On アーキテクチャ ガイド
- 外部リンク: SQL Server Always On可用性グループ
この情報が役に立たない場合は、「Always On可用性グループの詳細」を参照してください。
可用性グループの構成Always On問題が発生しています
一般的な構成の問題としては、可用性グループが無効になっているAlways On、アカウントが正しく構成されていない、データベース ミラーリング エンドポイントが存在しない、エンドポイントにアクセスできない (エラー 1418 SQL Server)、ネットワーク アクセスが存在しない、結合データベース コマンドが失敗する (SQL Server エラー 35250) などがあります。 これらの問題のトラブルシューティングに関するヘルプについては、次のドキュメントを参照してください。
Always On可用性グループの構成のトラブルシューティング (SQL Server)
追加のリンク: 複数の可用性グループを作成しようとするとエラー 41009 が修正されました
問題がまだ存在する場合は、「Always On可用性グループの詳細」を参照してください。
リスナーの構成に問題があります (19471、19476、およびその他のエラー)
お客様が発生する構成の最も一般的な問題の 1 つは、可用性グループ リスナーの作成です。 エラーは次のようになります。
-
メッセージ 19471、レベル 16、状態 0、行 2 WSFC クラスターが DNS 名 '' のネットワーク名リソースをオンラインにできませんでした。 DNS 名が取得されたか、既存のネーム サービスと競合している可能性があります。または、WSFC クラスター サービスが実行されていないか、アクセスできない可能性があります。 別の DNS 名を使用して名前の競合を解決するか、WSFC クラスター ログをチェックして詳細を確認します。
-
メッセージ 19476、レベル 16、状態 4、行 2 リスナーのネットワーク名と IP アドレスの作成が失敗しました。 WSFC サービスが実行されていないか、現在の状態でアクセスできないか、ネットワーク名と IP アドレスに指定された値が正しくない可能性があります。 WSFC クラスターの状態を確認し、ネットワーク管理者にネットワーク名と IP アドレスを検証します。
ほとんどの場合、前のメッセージが発生したリスナーの作成エラーは、Active Directory のクラスター名オブジェクト (CNO) がリスナー コンピューター オブジェクトを作成および読み取るためのアクセス許可がないためです。 この問題のトラブルシューティングについては、次の記事を参照してください。
問題がまだ存在する場合は、「Always On可用性グループの詳細」を参照してください。
自動フェールオーバーが期待どおりに機能しない
テスト中または運用環境で自動フェールオーバーが期待どおりに機能しない場合は、「SQL Server 2012 Always On環境での自動フェールオーバーの問題のトラブルシューティング」を参照してください。
指定した期間内の最大エラー数の不適切な構成は、プライマリがセカンダリに自動的にフェールオーバーしない主な原因の 1 つです。 この設定の既定値は N-1 で、N はレプリカの数です。 詳細については、「 フェールオーバー クラスター (グループ) の最大障害の制限」を参照してください。
問題がまだ存在する場合は、「Always On可用性グループの詳細」を参照してください。
Always On可用性グループへの接続に関する問題が発生しています
SQL Server 2012 でAlways On可用性グループの可用性グループ リスナーを構成した後、リスナーに ping を実行したり、アプリケーションから接続したりできない場合があります。 次のようなエラーが発生する場合があります。
Sqlcmd: エラー: Microsoft SQL Native Client: ログイン タイムアウトの有効期限が切れています。
このエラーと同様のエラーのトラブルシューティングを行うには、次の内容を確認してください。
詳細情報のリンク:
- 更新プログラムでは、SQL Server 2012 以降のバージョンのAlways On機能のサポートが、the.NET Framework 3.5 SP1 に導入されています
- マルチサブネット クラスタリングのSQL Server (SQL Server)
問題がまだ存在する場合は、「Always On可用性グループの詳細」を参照してください。
Azure VM (IaaS) でAlways On可用性グループの構成に関する問題が発生しています
リスナーの構成が不適切なため、Always Onに関連する多くの問題が発生します。 リスナーへの接続の問題が発生している場合は、
ILB リスナーのすべての制限事項を必ず読み、次の記事に記載されているすべての手順に従って、依存関係の構成、IP アドレス、および PowerShell スクリプトのその他のさまざまなパラメーターに特に注意してください。
不明な場合は、上記のドキュメントに従ってリスナーを削除して再作成することができます。
最近 VM を別のサービスに移動した場合、または IP アドレスが変更された場合は、新しいアドレスを反映するように IP アドレス リソースの値を更新する必要があり、AG の負荷分散エンドポイントを再作成する必要があります。 または
Set
コマンドを使用して、次のように IP アドレスをGet
更新できます。Get-ClusterResource "IPResourceName" | Set-ClusterParameter -name Address -value "w.x.y.z"
推奨されるドキュメント:
Azure Virtual Machines でSQL Server Always On可用性グループのロード バランサーを構成する
Microsoft Azure (IaaS) でSQL Server Always On可用性グループをデプロイするときの推奨事項とベスト プラクティス
問題がまだ存在する場合は、「Always On可用性グループの詳細」を参照してください。
プライマリからセカンダリへのフェールオーバー、またはその逆のフェールオーバーには長い時間がかかります
可用性グループでデータが失われることのない自動フェールオーバーまたは計画された手動フェールオーバーの後、フェールオーバー時間が目標復旧時間 (RTO) を超える場合があります。 原因と考えられる解決策のトラブルシューティングについては、「 トラブルシューティング: 可用性グループの超過 RTO」を参照してください。
問題がまだ存在する場合は、「Always On可用性グループの詳細」を参照してください。
プライマリ レプリカの変更が反映されないか、セカンダリ レプリカへのレプリケートに時間がかかる
プライマリ レプリカの変更が、タイムリーにセカンダリに反映されないことに気付く場合があります。 これらの問題のトラブルシューティングと解決を行うには、次の手順を試してください。
SQL Server 2012 および SQL Server 2014 環境については、「FIX: ディスクのセクター SQL Server サイズが異なる場合の同期の速度が低下する」を参照してください。
クラスター管理者でセカンダリ ノードが一時停止状態になっているかどうかを確認します。
問題がまだ存在する場合は、「Always On可用性グループの詳細」を参照してください。
AG データベースのトランザクション ログのサイズを管理する方法
プライマリ サーバーまたはセカンダリ サーバーで定期的なバックアップを構成することで、トランザクション ログのサイズを小さくできます。
詳細については、次のトピックを参照してください。
- サポートされているバックアップを可用性グループのセカンダリ レプリカにオフロードする
- セカンダリ レプリカAlways On可用性グループ Read-Only 使用したトランザクション ログ バックアップの実行 - パート 1
この情報が役に立たない場合は、「Always On可用性グループの詳細」を参照してください。
プライマリ サーバーまたはセカンダリ サーバーが状態の解決中に発生したか、予期しないフェールオーバーが発生する
システムとアプリケーションのイベント ログでハードウェアの問題やその他のエラーを確認し、ベンダーと協力して修正します。
仮想マシンを使用している場合は、そのサポート情報をチェックして、問題の原因となっている可能性がある最近報告された問題があるかどうかを確認します。 たとえば、 ESXi (2039495) の VMXNET3 vNIC のゲスト オペレーティング システム レベルでの大きなパケット損失 によって、AG 構成に問題が発生する場合があります。
詳しくは、以下の資料を参照してください。
問題がまだ存在する場合は、「Always On可用性グループの詳細」を参照してください。
リソースをオンラインにできない
SQL ErrorLog のメッセージを確認して、データベースの復旧に時間がかかるかどうかを確認します。
問題がまだ存在する場合は、「Always On可用性グループの詳細」を参照してください。
よく寄せられる質問
1 つの可用性グループに対して 2 つのリスナーを持つことはできますか?
はい。同じ可用性グループに対して複数のリスナーを設定できます。 同じ可用性グループ (Goden Yao) に対して複数のリスナーを作成する方法に関するページを参照してください。
トラフィックとクライアント接続を常にオンにするための別の NIC カードを使用できますか?
はい。Always On トラフィック用の専用 NIC カードを使用できます。 「 専用ネットワーク上で通信するように可用性グループを構成する」を参照してください。
フェールオーバー クラスター インスタンスAlways Onサポートされているエディションは何ですか?
SQL Serverオンライン ブックのこのトピックには、SQL Server 2016 のエディションとサポートされている機能に関する詳細情報が含まれています。
クラスターのすべてのノードで障害が発生した場合に復旧する方法
AG 構成での分散トランザクションのサポートに関する情報はどこで確認できますか?
「 トランザクション - 可用性グループとデータベース ミラーリング」を参照してください。
Always On構成を更新する方法
TDE (Transparent Data Encryption) 対応データベースを AG 構成に追加する方法
TDE 対応 DB を AG に追加するには、「TDE データベースのAlways Onを構成する方法」を参照してください。
セカンダリがプライマリに遅れているかどうかを確認するためのアラートを構成する方法
次のスクリプトを使用できます。
SELECT ag.name AS ag_name, ar.replica_server_name AS ag_replica_server, dr_state.database_id AS database_id, is_ag_replica_local = CASE WHEN ar_state.is_local = 1 THEN N'LOCAL' ELSE 'REMOTE' END, ag_replica_role = CASE WHEN ar_state.role_desc IS NULL THEN N'DISCONNECTED' ELSE ar_state.role_desc END, dr_state.last_hardened_lsn, dr_state.last_hardened_time, datediff(s,last_hardened_time, getdate()) AS 'seconds behind primary' FROM (( sys.availability_groups AS ag JOIN sys.availability_replicas AS ar ON ag.group_id = ar.group_id) JOIN sys.dm_hadr_availability_replica_states AS ar_state ON ar.replica_id = ar_state.replica_id) JOIN sys.dm_hadr_database_replica_states dr_state ON ag.group_id = dr_state.group_id AND dr_state.replica_id = ar_state.replica_id
データベースの状態が同期以外の場合にアラートを受け取る方法
次のスクリプトを使用できます。
SELECT ag.name AS ag_name, ar.replica_server_name AS ag_replica_server, dr_state.database_id AS database_id, is_ag_replica_local = CASE WHEN ar_state.is_local = 1 THEN N'LOCAL' ELSE 'REMOTE' END, ag_replica_role = CASE WHEN ar_state.role_desc IS NULL THEN N'DISCONNECTED' ELSE ar_state.role_desc END, ar_state.connected_state_desc, ar.availability_mode_desc, dr_state.synchronization_state_desc FROM (( sys.availability_groups AS ag JOIN sys.availability_replicas AS ar ON ag.group_id = ar.group_id ) JOIN sys.dm_hadr_availability_replica_states AS ar_state ON ar.replica_id = ar_state.replica_id) JOIN sys.dm_hadr_database_replica_states dr_state ON ag.group_id = dr_state.group_id AND dr_state.replica_id = ar_state.replica_id
Always On グループを監視するためのその他の方法については、次のリンクを参照することもできます。