徵狀
請試想下列案例:
-
您是在伺服器上執行 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 的伺服器上遇到下列一或多個症狀,而且現在正在託管您的可用性群組的主要複本:
-
次要複本報告為「未同步處理」。
-
當您查詢 sys.dm_exec_requests 時,您會注意到使用者會話與其命令報告為「DB_STARTUP」之間的間歇封鎖封鎖。 您也可能會注意到 檢查點 和 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 anotherprocess and has been chosen as the deadlock victim. Rerun the transaction.
-
如果您已為 Microsoft SQL Server Service Broker 啟用您的可用性資料庫,則可能無法成功處理您的可用性資料庫中的訊息。 如果您啟動探測器追蹤工具,然後捕獲「Broker:訊息分類」事件,則會捕獲下列事件:
9791,在寄件者的資料庫中停用 broker
注意: 這不是系統性問題。 您可以將這些累計更新套用到 AlwaysOn 設定,而不會遇到此問題。 如果您已套用這些累計更新,但您沒有注意到這個問題,您的系統不會受到影響,且這些資訊不適用於您。
原因
發生這個問題的原因是,在系統執行緒與使用者連線之間,有時候會發生爭用情況。 這可防止累計更新的修補邏輯取得完成更新程式所需的鎖。
解決方案
若要解決此問題,請套用下列 重要的隨選(貨到) 熱修復程式:
3034679 修正:可能會報告 AlwaysOn 可用性群組未同步處理重要 您必須套用此貨到付款修復程式,而不是下列累計更新:
-
SQL Server 2014 累計更新5
-
SQL Server 2012 Service Pack 2 累計更新4
-
SQL Server 2012 Service Pack 2 累加更新3
注意: 如果您已套用這些累計更新,您必須使用下列解決方法來解決此問題。
因應措施
由於這個問題是由於使用者會話與資料庫轉換為主要角色時,針對可用性資料庫進行的爭用,而造成的問題,因此您必須消除此爭用,才能讓資料庫從這種狀態復原。若要解決此問題,請遵循下列步驟:
-
以指定的順序嘗試下列方法。
方法1:消除資料庫存取當資料庫遇到「症狀」區段中提到的症狀時,請視需要使用下列其中一個或兩個步驟,以消除鎖定封鎖條件:
-
查詢 sys.dm_exec_requests 以找出在可用性資料庫中發生鎖定封鎖的會話。 使用 KILL 語句來結束這些會話。
-
停用或停止正在存取可用性資料庫的應用程式。
如果方法1沒有解決問題,請移至方法2。
方法2:重新開機 SQL Server 主機伺服器當應用程式存取和使用者存取仍處於停用狀態時,請重新開機託管受影響的可用性資料庫的 SQL Server 實例。 若要執行這項操作,請依照下列步驟執行:
-
停用可用性群組的自動容錯移轉。
-
重新開機託管主要複本的受影響 SQL Server 實例。
-
啟用可用性群組的自動容錯移轉。
-
-
受影響的資料庫完全還原之後,重新建立應用程式和使用者連線。
狀態
Microsoft 已確認<適用於>一節中所列的 Microsoft 產品確實有上述問題。
參考
如需受此問題影響之累積更新的詳細資訊,請參閱下列 Microsoft 知識庫文章: