徵狀
請試想下列案例:
-
您使用的是 Microsoft SQL Server 2016、2014或2012。
-
您的資料庫是 AlwaysOn 可用性群組的一部分。
-
在主要複本中,您可以縮小資料庫檔案以減少其大小。
-
主要複本會將事務記錄記錄中記錄的所有變更傳送到副複本。
-
在次要複本中,復原執行緒會將事務記錄記錄的變更套用到屬於可用性群組的資料庫。
在這種情況下,複本已暫停。此外,您可能會收到類似以下的錯誤訊息:
<時間戳記> spid41s 錯誤:3456、嚴重性:21、State: 1. <時間戳記> spid41s 無法針對事務 ID (#)復原記錄記錄(#),在頁面(#)上,資料庫 ' <dbname>」(資料庫 ID #)。 頁面: LSN = (#),分攤單位 = #,type = #。 記錄: OpCode = #、coNtext #、PrevPageLSN:(#)。 從資料庫備份還原,或修復資料庫。 <時間戳記> spid41s AlwaysOn 可用性群組資料庫 ' <dbname>」的資料移動已暫停,原因如下:「system」(來源識別碼 2;來源字串: "SUSPEND_FROM_REDO")。 若要繼續在資料庫上移動資料,您將需要手動繼續執行資料庫。 如需如何繼續可用性資料庫的相關資訊,請參閱 SQL Server 線上書籍。 <時間戳記> spid41s 錯誤:3313、嚴重性:21、State: 2. <時間戳記> spid41s 在資料庫 ' <dbname>」中重做記錄的作業時,記錄識別碼(#)中發生錯誤。 通常,特定的故障會記錄為 Windows 事件記錄服務中的錯誤。 從完整備份還原資料庫,或修復資料庫。
原因
如果資料庫引擎在系統頁面(GAM、PFS)上遇到順序 LSNs,則在復原程式期間套用變更時,就會發生此問題。
解決方案
這個問題首先是在下列 SQL Server 累積更新中修正:
每個新的 SQL Server 累計更新都包含所有的修正程式,以及前一個累積更新中所包含的所有安全性修正程式。 我們建議您下載並安裝最新的 SQL Server 累積更新:
此更新可避免發生此問題。 如果問題已經出現,請按照下列步驟重新加入 AlwaysOn 可用性群組:
-
移除現有的 AlwaysOn 副複本。
-
在受影響的資料檔案上執行下列命令,以移除資料庫中未分派的空間:
DBCC SHRINKFILE(<file_id>, TRUNCATEONLY)
-
備份資料庫和記錄檔。
-
還原 AlwaysOn 副複本的資料庫和記錄。
-
加入 [AlwaysOn 可用性] 群組。
狀態
Microsoft 已確認<適用於>一節中所列的 Microsoft 產品確實有上述問題。
參考
瞭解 Microsoft 用於描述軟體更新的 詞彙 。