AlwaysOn 可用性グループは、SQL Server 2014 CU5、SQL Server 2012 SP2 CU4、または SQL Server 2012 SP2 CU3 を適用した後に、同期されていないと報告される場合がある

適用対象: SQL Server 2014 EnterpriseSQL Server 2014 EnterpriseSQL Server 2014 Developer

現象



次のような状況を考えます。
  • ローリング アップグレードの一部として、可用性グループのセカンダリ レプリカをホストするサーバーで、Microsoft SQL Server 2014 または Microsoft SQL Server 2012 Service Pack 2 (SP2) を実行しています。
  • 以下の更新プログラムのいずれかを SQL Server のインストールに適用しています。
    • SQL Server 2014 の累積的な更新プログラム 5
    • SQL Server 2012 Service Pack 2 の累積的な更新プログラム 4
    • SQL Server 2012 Service Pack 2 の累積的な更新プログラム 3
    重要 この資料に記載されている修正プログラムによって、これらの累積的な更新プログラムは置き換えられます。これをまだ実行していない場合は、これらの更新プログラムをインストールしてはいけません。
     
  • 累積的な更新プログラムのインストールを完了するには、このセカンダリ レプリカを再起動します。
  • 更新されたセカンダリ レプリカをプライマリの役割に移行中の可用性グループをフェールオーバーするとします。
この状況では、可用性グループのプライマリ レプリカをホストしている SQL Server を実行中のサーバーで次の現象が 1 つまたは複数発生する可能性があります。
  • セカンダリ レプリカは、"同期されていません" と報告されます。
  • sys.dm_exec_requests に対してクエリを実行すると、ユーザー セッションと、“DB_STARTUP” としてコマンドが出力されるセッションの間に、継続的なロックのブロッキングが発生します。また、 CHECKPOINT コマンドと DB_STARTUP のコマンドの間でブロックが発生することもあります。
  • いずれかの可用性データベースを回復したセッションを含むデッドロックは、SQL Server エラー ログで報告されます。これらのログは次のようになります。

    <date/time> spid<xx> Recovery is writing a checkpoint in database <dbname/dbid>. This isan informational message only. No user action is required.
    <date/time> spid<xx> Recovery completed for database <dbname/dbid> in <x> second(s) (analysis
    <x> ms, redo <x> ms, undo <x> ms.) This is an informational message only. No user action is required.

    <date/time> spid<xx> Error: 1205, Severity: 13, State: 28.
    <date/time> spid<xx> Transaction (Process ID <xx>) was deadlocked on lock resources with another
    process and has been chosen as the deadlock victim. Rerun the transaction.
  • Microsoft SQL Server Service Broker の可用性データベースが有効である場合、可用性データベース内のメッセージが正常に処理されないことがあります。プロファイラのトレース ツールを起動してから、"Broker:Message Classify" イベントをキャプチャすると、次のイベントがキャプチャされます。

    9791、ブローカは送信側のデータベースで無効になる
注: これは体系的な問題ではありません。この問題が発生しなくても AlwaysOn 構成でこれらの累積的な更新プログラムを適用できる場合があります。これらの累積的な更新プログラムが既に適用されており、ユーザーがこの問題に気づいていない場合、システムは影響を受けないため、この情報は不要です。

原因


この問題は、システムのスレッドとユーザーの接続の間でときどき競合が発生することが原因で発生します。これは累積的な更新プログラムの修正プログラムのロジックが更新プロセスを完了する必要があるロックを取得することを防ぎます。

解決策


この問題を解決するには、次の重要なオンデマンド (COD)修正プログラムが適用されます。

3034679の修正: AlwaysOn 可用性グループは、同期するいないと報告される場合があります

重要 次の累積的な更新プログラムではなく、COD 修正プログラムを適用する必要があります。
  • SQL Server 2014 の累積的な更新プログラム 5
  • SQL Server 2012 Service Pack 2 の累積的な更新プログラム 4
  • SQL Server 2012 Service Pack 2 の累積的な更新プログラム 3


注: これらの累積的な更新プログラムが既に適用されている場合、この問題を解決するには、次の回避策を使用する必要があります。

回避策


この問題は、ユーザーのセッションと、プライマリの役割へのデータベース移行時に可用性データベースで発生する更新セッションの間の競合により発生しているため、この競合を排除し、データベースを有効にして、この状態から回復する必要があります。

この問題を回避するには、以下の手順を実行します。
  1. 指定された順番に、以下の方法を試してみます。

    方法 1: データベースへのアクセスを排除する
    データベースで「現象」セクションに記載されている現象が発生している場合、必要に応じて以下のいずれかまたは両方の手順を使用して、ロックブロッキングの状態を解消します。
    • sys.dm_exec_requestsに対するクエリを実行して、可用性データベースでロック ブロックが発生しているセッションを検索します。これらのセッションを終了するには、KILL ステートメントを使用します。
    • 無効にするか、可用性データベースにアクセスしているアプリケーションを停止します。

    方法 1 で問題が解決しない場合は、方法 2 に進みます。


    方法 2: SQL Server のホスト サーバーを再起動する
    アプリケーションのアクセスとユーザーのアクセスが引き続き無効である場合、影響を受けた可用性データベースをホストしている SQL Server のインスタンスを再起動します。これを行うには、以下の手順を実行します。
    1. 可用性グループの自動フェールオーバーを無効にします。
    2. プライマリ レプリカをホストしている SQL Server の影響を受けたインスタンスを再起動します。
    3. 可用性グループの自動フェイル オーバーを有効にします。
  2. 影響を受けたデータベースを完全に回復した後は、アプリケーションとユーザーの接続を再確立します。

状況


マイクロソフトは、この問題を「対象製品」セクションに記載されているマイクロソフト製品の問題として認識しています。

関連情報


この問題の影響を受ける累積的な更新プログラムの詳細については、以下のマイクロソフト サポート技術情報を参照してください。