現象
次のような状況で問題が発生します。
-
Microsoft SQL Server 2016、2014、または2012を使用している。
-
AlwaysOn 可用性グループの一部であるデータベースを使用しています。
-
プライマリレプリカでは、サイズを小さくするためにデータベースファイルを圧縮します。
-
プライマリレプリカは、トランザクションログに記録されているすべての変更をセカンダリレプリカに送信します。
-
セカンダリレプリカでは、redo スレッドによって、トランザクションログから可用性グループの一部であるデータベースに変更が適用されます。
このシナリオでは、レプリカは中断されます。さらに、次のようなエラーメッセージが表示されることがあります。
<タイムスタンプ> spid41s エラー: 3456、レベル:21、状態: 1. <タイムスタンプ> spid41s は、ログレコード (#) を再実行できませんでした。トランザクション ID (#)、ページ (#)、データベース ' <dbname> ' (データベース ID #)。 ページ: LSN = (#)、アロケーションユニット = #、type = #。 ログ: オペコード = #、context #、PrevPageLSN: (#) データベースのバックアップから復元するか、データベースを修復します。 <タイムスタンプ> spid41s AlwaysOn 可用性グループデータベース ' <dbname> ' のデータ移動は、次の理由で中断されました: "system" (ソース ID 2;ソース文字列: ' SUSPEND_FROM_REDO ')。 データベースでデータの移動を再開するには、データベースを手動で再開する必要があります。 可用性データベースを再開する方法については、「SQL Server Books Online」を参照してください。 <タイムスタンプ> spid41s エラー: 3313、深刻度:21、状態: 2> <. データベース ' <dbname> ' でログに記録された操作をやり直しているときに、エラーがログレコード ID (#) で発生しました。 通常、特定のエラーは、Windows イベントログサービスでエラーとして記録されています。 完全バックアップからデータベースを復元するか、データベースを修復します。
原因
この問題は、データベースエンジンがシステムページ (GAM、PFS) で注文前の LSNs を検出した場合に、やり直し処理中に変更が適用されると発生します。
解決方法
この問題は、SQL Server の次の累積的な更新プログラムで最初に修正されました。
SQL Server 用の新しい累積更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正が含まれています。 SQL Server の最新の累積的な更新プログラムをダウンロードしてインストールすることをお勧めします。
この更新プログラムにより、この問題が発生しなくなります。 問題が既に発生している場合は、次の手順に従って AlwaysOn 可用性グループに再度参加します。
-
既存の AlwaysOn セカンダリレプリカを削除します。
-
影響を受けたデータファイルに対して、次のコマンドを実行して、データベースから割り当てられていない領域を削除します。
DBCC SHRINKFILE(<file_id>, TRUNCATEONLY)
-
データベースとログファイルをバックアップします。
-
データベースとログを AlwaysOn セカンダリレプリカに復元します。
-
AlwaysOn 可用性グループに参加します。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
関連情報
ソフトウェアの更新を説明するために Microsoft が使用する 用語 について説明します。