KB3054530 - 修正:當您將次要副本變更為無法讀取時,次要副本的頁面發生損毀

套用到
SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard

症狀

假設您在 Microsoft SQL Server 2012 中使用「AlwaysOn 可用性群組」功能。 當您將次要副本的連線存取權從「可讀」變更為「無法讀取」時,在給定副本中使用頁面壓縮的頁面會發生損毀。

在次要副本遇到此問題的可用性資料庫無法復原,因為在同步的重做階段期間發生錯誤。 次要複本不會與主要複本同步,並報告同步狀態為「SUSPEND_FROM_REDO」。此外,您會在裝載次要複本的 SQL Server 錯誤記錄檔中收到下列錯誤訊息:

注意

< 日期><時間> SPID<識別碼> 錯誤:17066,嚴重性:16,狀態:1。
< 日期><時間>spid<識別碼> SQL Server 判斷提示: 檔案: page.cpp>, <line=3898 失敗 判斷提示 = '!pageFull'。 此錯誤可能與時間有關。 如果重新執行陳述式後仍持續發生錯誤,請使用 DBCC CHECKDB 來檢查資料庫的結構完整性,或重新啟動伺服器以確保記憶體內資料結構未損毀。
< 日期><時間> SPID<識別碼> 錯誤:3624,嚴重性:20,狀態:1。
< 日期><時間> SPID<識別碼> 系統判斷提示檢查失敗。 如需詳細資料,請檢查 SQL Server 錯誤記錄檔。 一般而言,判斷提示失敗是由軟體錯誤或資料損毀所造成。 若要檢查資料庫損毀,請考慮執行 DBCC CHECKDB。 如果您同意在安裝期間傳送傾印給 Microsoft,將會將迷你傾印傳送給 Microsoft。 更新可能可從 Microsoft 的最新 Service Pack 或技術支援的 QFE 中提供。
< 日期><時間> SPID<識別碼> AlwaysOn 可用性群組 資料庫 '<DataBase Name>' 的資料移動已暫停,原因如下:“system” (來源 ID 2;來源字串: 'SUSPEND_FROM_REDO') 。 若要繼續資料庫上的資料移動,您必須手動繼續資料庫。 如需如何繼續可用性資料庫的相關資訊,請參閱《SQL Server 線上叢書》。
< 日期><時間> SPID<識別碼> 錯誤:3313,嚴重性:21,狀態:2。
< 日期><時間> SPID<識別碼> 在資料庫 '<Database Name>' 中重做已記錄的作業時,記錄識別碼 (1786:4978584:74) 發生錯誤。 通常,特定失敗先前會記錄為 Windows 事件記錄檔服務中的錯誤。 從完整備份還原資料庫,或修復資料庫。
< 日期><時間> SPID<ID> ALTER DB 參數選項:RESUME
< 日期><時間> SPID<識別碼> AlwaysOn 可用性群組 已恢復資料庫 '<DataBase Name>' 的資料移動。 這是一則資訊訊息。 不需要使用者動作。
< 日期><時間>SPID<識別碼> 資料庫中<正在復原非限定的交易 AlwaysOn 可用性群組狀態變更的資料庫名稱>。 預計復原完成度:100%。 這是一則資訊訊息。 不需要使用者動作。
< 日期><時間> spid<ID> AlwaysOn 可用性組與主要資料庫的連線已終止,用於具有複本識別碼: {bbdedecb-f26b-47e9-9e7d-7c22f99edb23} 的可用性複本上的次要資料庫 '<DataBase Name>'。 這是一則資訊訊息。 不需要使用者動作。
< 日期><時間> spid<ID> 正在啟動資料庫「<資料庫名稱>」。
< 日期><時間> SPID<ID> 資料庫「<資料庫名稱>」復原 (13) 完成 0% (剩餘約 781 秒) 。 階段 1,共 3 階段。 這是一則資訊訊息。 不需要使用者動作。
……

解決方式

此問題已先在下列 SQL Server 累積更新中修正。

SQL Server 2012 SP2 的累積更新 6

            
             SQL Server 2012 SP1 的累積更新 16
          

關於 SQL Server 的累積更新

SQL Server 的每個新累積更新都包含所有 Hotfix 和先前累積更新的所有安全性修正程式。 查看 SQL Server 的最新累積更新:

      

更多資訊

當次要副本的讀取存取權變更時,可能會出現上一個問題。
您可以使用下列兩種方法,設定次要複本上可用性資料庫的讀取存取權:

  • 使用 ALTER AVAILABILITY GROUP 命令設定讀取存取權:

    ALTER AVAILABILITY GROUP [AGName]
    MODIFY REPLICA ON N'<SRV>' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = NO))
    
  • 變更 SSMS) 物件總管中的設定SQL Server Management Studio (以設定讀取存取權:

    • 連線至伺服器,然後開啟 AlwaysOn Availability 資料夾。
    • 開啟 [可用性群組] 資料夾。
    • 以滑鼠右鍵按一下可用性群組,然後選取 [屬性]。
    • 將次要副本的 [可讀取次要] 屬性變更為 [否],然後按一下 [確定]。

狀態

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