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

重要事項

可用性グループの設定と構成に関するポインター Always On必要です

Always On構成の設定に関するドキュメントをお探しの場合は、次のドキュメントを参照してください。

Always On可用性グループ (SQL Server) を使用したはじめに - このドキュメントでは、可用性グループとセットアップに関する多くの質問に対する回答を提供します。 この記事のすべての手順に従い、Always On可用性グループ (SQL Server) の前提条件、制限、推奨事項を確認すると、環境内の可用性グループの設定と保守に関して発生する可能性のある多くの問題を防ぐことができます。

その他のリソース

この情報が役に立たない場合は、「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: ログイン タイムアウトの有効期限が切れています。

このエラーと同様のエラーのトラブルシューティングを行うには、次の内容を確認してください。

詳細情報のリンク:

問題がまだ存在する場合は、「Always On可用性グループの詳細」を参照してください。

Azure VM (IaaS) でAlways On可用性グループの構成に関する問題が発生しています

  1. リスナーの構成が不適切なため、Always Onに関連する多くの問題が発生します。 リスナーへの接続の問題が発生している場合は、

    1. ILB リスナーのすべての制限事項を必ず読み、次の記事に記載されているすべての手順に従って、依存関係の構成、IP アドレス、および PowerShell スクリプトのその他のさまざまなパラメーターに特に注意してください。

    2. 不明な場合は、上記のドキュメントに従ってリスナーを削除して再作成することができます。

  2. 最近 VM を別のサービスに移動した場合、または IP アドレスが変更された場合は、新しいアドレスを反映するように IP アドレス リソースの値を更新する必要があり、AG の負荷分散エンドポイントを再作成する必要があります。 または Set コマンドを使用して、次のように IP アドレスをGet更新できます。

    Get-ClusterResource "IPResourceName" | Set-ClusterParameter -name Address -value "w.x.y.z"
    

推奨されるドキュメント:

問題がまだ存在する場合は、「Always On可用性グループの詳細」を参照してください。

プライマリからセカンダリへのフェールオーバー、またはその逆のフェールオーバーには長い時間がかかります

可用性グループでデータが失われることのない自動フェールオーバーまたは計画された手動フェールオーバーの後、フェールオーバー時間が目標復旧時間 (RTO) を超える場合があります。 原因と考えられる解決策のトラブルシューティングについては、「 トラブルシューティング: 可用性グループの超過 RTO」を参照してください。

問題がまだ存在する場合は、「Always On可用性グループの詳細」を参照してください。

プライマリ レプリカの変更が反映されないか、セカンダリ レプリカへのレプリケートに時間がかかる

プライマリ レプリカの変更が、タイムリーにセカンダリに反映されないことに気付く場合があります。 これらの問題のトラブルシューティングと解決を行うには、次の手順を試してください。

問題がまだ存在する場合は、「Always On可用性グループの詳細」を参照してください。

AG データベースのトランザクション ログのサイズを管理する方法

プライマリ サーバーまたはセカンダリ サーバーで定期的なバックアップを構成することで、トランザクション ログのサイズを小さくできます。

詳細については、次のトピックを参照してください。

この情報が役に立たない場合は、「Always On可用性グループの詳細」を参照してください。

プライマリ サーバーまたはセカンダリ サーバーが状態の解決中に発生したか、予期しないフェールオーバーが発生する

問題がまだ存在する場合は、「Always On可用性グループの詳細」を参照してください。

リソースをオンラインにできない

SQL ErrorLog のメッセージを確認して、データベースの復旧に時間がかかるかどうかを確認します。

問題がまだ存在する場合は、「Always On可用性グループの詳細」を参照してください。

よく寄せられる質問

  1. 1 つの可用性グループに対して 2 つのリスナーを持つことはできますか?

    はい。同じ可用性グループに対して複数のリスナーを設定できます。 同じ可用性グループ (Goden Yao) に対して複数のリスナーを作成する方法に関するページを参照してください。

  2. トラフィックとクライアント接続を常にオンにするための別の NIC カードを使用できますか?

    はい。Always On トラフィック用の専用 NIC カードを使用できます。 「 専用ネットワーク上で通信するように可用性グループを構成する」を参照してください。

  3. フェールオーバー クラスター インスタンスAlways Onサポートされているエディションは何ですか?

    SQL Serverオンライン ブックのこのトピックには、SQL Server 2016 のエディションとサポートされている機能に関する詳細情報が含まれています

  4. クラスターのすべてのノードで障害が発生した場合に復旧する方法

    「強制クォーラムによる WSFC ディザスター リカバリー (SQL Server)」を参照してください。

  5. AG 構成での分散トランザクションのサポートに関する情報はどこで確認できますか?

    トランザクション - 可用性グループとデータベース ミラーリング」を参照してください。

  6. Always On構成を更新する方法

    可用性グループ レプリカ インスタンスAlways Onアップグレードする」を参照してください。

  7. TDE (Transparent Data Encryption) 対応データベースを AG 構成に追加する方法

    TDE 対応 DB を AG に追加するには、「TDE データベースのAlways Onを構成する方法」を参照してください。

  8. セカンダリがプライマリに遅れているかどうかを確認するためのアラートを構成する方法

    次のスクリプトを使用できます。

    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
    
  9. データベースの状態が同期以外の場合にアラートを受け取る方法

    次のスクリプトを使用できます。

    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 グループを監視するためのその他の方法については、次のリンクを参照することもできます。

Always On可用性グループの詳細