KB3095156 - 修正:當您嘗試在 SQL Server 2012 或 SQL Server 2014 中新增或備份記錄檔時,發生錯誤 9002 和錯誤 3052

Applies To
SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

症狀

假設您在 Microsoft SQL Server 2012 或 SQL Server 2014 資料庫中使用 AlwaysOn 可用性群組,且存在大型的開啟作用中交易,且需要額外的記錄空間。 當記錄檔因為下列其中一個原因而無法成長時,交易會失敗。

  • 沒有額外的檔案空間
  • 記錄檔設定為不要成長
  • 記錄檔已達到其設定的最大大小

此外,您收到下列錯誤訊息:

注意

錯誤:9002,嚴重性:17,狀態:9。
因 'LOG_BACKUP',資料庫 '<database name>' 的交易記錄檔已滿。

執行記錄備份之後,您會收到另一個 9002 錯誤訊息:

注意

錯誤:9002,嚴重性:17,狀態:9。
因 'ACTIVE_TRANSACTION' 導致資料庫 '<database name>' 的交易記錄已滿。

在另一次記錄備份之後,您會收到另一個 9002 錯誤訊息,接著是 5901 錯誤訊息:

注意

錯誤:9002,嚴重性:17,狀態:9。
因 'AVAILABILITY_REPLICA' 導致資料庫 '<database name>' 的交易記錄已滿。

      

注意

無法在資料庫 <資料庫名稱> 中寫入檢查點記錄,因為記錄空間不足。 請連絡資料庫系統管理員,以截斷記錄,或將更多空間配置給資料庫記錄檔。
錯誤:5901,嚴重性:16,狀態:1。
屬於資料庫「<資料庫名稱>」的一或多個復原單元無法產生檢查點。 這通常是由於缺少系統資源(例如磁碟或記憶體)所造成,或在某些情況下是由於資料庫損毀所造成。 請檢查錯誤記錄檔中先前的項目,以取得此失敗的詳細資訊。

當在交易復原期間進行後續檢查點或記錄備份時,您可能會收到下列錯誤訊息:

注意

Msg 3052, Level 16, State 1, Line 4
備份記錄無法記錄資料庫「<資料庫名稱>」的更新。 在有日誌空間可供記錄之後,後續的日誌備份將需要將備份點從「<LSN ID 1>」推進到「<LSN ID 2>」。

當您收到這些訊息時,您將無法再將任何新的交易提交至資料庫,且無法擴大記錄檔或新增其他記錄檔。

解決方式

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

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

SQL Server 的每個新累積更新都包含所有 Hotfix 和先前累積更新的所有安全性修正程式。 我們建議您下載並安裝 SQL Server 的最新累積更新:

      

因應措施

您可以使用下列因應措施來截斷記錄並繼續活動。

  1. 檢查每個次要副本以驗證次要副本last_hardened_lsn (查看 sys.dm_hadr_database_replica_states) 符合主要副本last_hardened_lsn。 您可以執行連線至主要複本執行個體的下列查詢來執行此動作

    SELECT ags.name as AGGroupName,
        ar.replica_server_name as InstanceName,
        hars.role_desc,
        db_name(drs.database_id)as DBName,
        drs.last_hardened_lsn, drs.log_send_queue_size,
        drs.synchronization_state_desc as SyncState,
        ar.availability_mode_desc as SyncMode,
        CASE drs.is_local WHEN 1 THEN drs.database_id ELSE NULL END as database_id
        FROM sys.dm_hadr_database_replica_states drs
        LEFT JOIN sys.availability_replicas ar ON drs.replica_id = ar.replica_id
        LEFT JOIN sys.availability_groups ags  ON ar.group_id = ags.group_id
        LEFT JOIN sys.dm_hadr_availability_replica_states hars
            ON ar.group_id = hars.group_id and ar.replica_id = hars.replica_id
          WHERE db_name(drs.database_id) = '<database name>'
    
  2. 在主要複本上

    • 從可用性群組移除資料庫。
    • 將資料庫重新加入至可用性群組。
  3. 在每個次要副本上

    • 將資料庫重新加入至可用性群組。

透過從可用性群組移除資料庫,它會立即截斷其記錄並釋放記錄空間。

如果每個次要複本上的last_hardened_lsn與主要複本相同,而且在從可用性群組移除資料庫並在每個次要複本上重新新增資料庫期間未進行任何記錄備份,則次要複本將會成功重新新增,而不會發生任何錯誤,也不需要在次要複本上還原記錄備份。

如果次要複本的主要複本不是最新的,而且您必須先從可用性群組移除資料庫,次要複本才能趕上進度,則次要複本可能必須先還原記錄備份,以在將它重新新增至可用性群組之前趕上進度,或在次要複本上卸除資料庫,然後使用完整和交易記錄資料庫備份重新植入。

狀態

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