KB3173471 - 修正:「無法重做日誌記錄」錯誤,且副本在 2016、2014 或 2012 SQL Server 被暫停

套用到
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2012 Service Pack 3 SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Enterprise Core

症狀

請考慮以下案例:

  • 你使用的是 Microsoft SQL Server 2016、2014 或 2012。
  • 你有一個屬於 AlwaysOn 可用性群組的資料庫。
  • 在主副本上,你會縮小資料庫檔案以縮小它們的大小。
  • 主要副本會將交易日誌中記錄的所有變更傳送到次要副本。
  • 在次要副本上,重做執行緒會將交易日誌中的變更套用到屬於可用性群組的資料庫。

在此情境中,複製品會被暫停。

此外,您可能會收到類似以下錯誤訊息的訊息:

注意

<時間戳> 記 spid41s 錯誤:3456,嚴重度:21,狀態:1。
<時間戳> 記 spid41s 無法重做日誌記錄 (#) ,交易 ID (#) ,頁面 (#) ,資料庫 '<dbname>' (資料庫 ID #) 。 頁碼:LSN = (#) ,分配單位 = #,類型 = #。 日誌:操作代碼 = #,上下文 #,PrevPageLSN: (#) 。 從資料庫備份還原,或修復資料庫。
<時間戳記> spid41s AlwaysOn 可用性群組資料庫「<dbname>」的資料移動因以下原因被暫停:「system」 (Source ID 2;來源串:「SUSPEND_FROM_REDO ) 。 若要恢復資料庫中的資料移動,您需要手動恢復資料庫。 有關如何恢復可用性資料庫的資訊,請參閱 SQL Server Books Online。
<時間戳>記 spid41s 錯誤:3313,嚴重度:21,狀態:2.<時間戳記> spid41s 在重新執行資料庫中已記錄的操作<>時,日誌記錄 ID (#) 發生錯誤。 通常,該特定失敗會先在 Windows 事件日誌服務中記錄為錯誤。 從完整備份還原資料庫,或修復資料庫。

原因

當重做過程中,若資料庫引擎在系統頁面 (GAM、PFS) 遇到順序不順的 LSN 時,就會出現此問題。

解決方式

此問題首次在以下 SQL Server 累積更新中被修正:

建議:安裝最新的 SQL Server 累積更新

每次新的 SQL Server 累積更新都包含了之前累積更新中包含的所有熱修補與安全修補。 我們建議您下載並安裝最新的 SQL Server 累積更新:

      

        
這次更新防止了這個問題發生。 如果問題已經發生,請依照以下步驟重新加入 AlwaysOn 可用性群組:

  1. 移除現有的 AlwaysOn 次要副本。
  2. 對受影響的資料檔案執行以下指令,移除資料庫中未分配的空間:
    DBCC 縮縮檔案 (<file_id>,僅 TRUNCATEONLY)
  3. 備份資料庫和日誌檔案。
  4. 還原 AlwaysOn 次要副本的資料庫和日誌。
  5. 加入 AlwaysOn 可用性群組。

      

狀態

Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。

參考資料

了解 Microsoft 用來說明軟體更新的術語