首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

打破迷思:破壞記錄備份鏈後,差異備份也能重新啟動記錄鏈

     編輯:關於SqlServer

迷思

許多人認為:記錄鏈斷裂後(如切換至簡單復原模式、使用 BACKUP LOG WITH NO_LOG/TRUNCATE_ONLY、鏡像容錯移轉),必須執行完整備份才能重新開始記錄備份。

事實:差異備份同樣可以重新啟動記錄鏈

只要差異備份的跨度涵蓋記錄鏈斷裂的 LSN 間隙,即可作為新的差異基準,讓後續記錄備份成功。

實測示範

CREATE DATABASE LogChainTest; GO
ALTER DATABASE LogChainTest SET RECOVERY FULL; GO
BACKUP DATABASE LogChainTest TO DISK = 'C:\LogChainTest.bck' WITH INIT; GO
BACKUP LOG LogChainTest TO DISK = 'C:\LogChainTest_log1.bck' WITH INIT; GO
-- 破壞記錄鏈
ALTER DATABASE LogChainTest SET RECOVERY SIMPLE; GO
ALTER DATABASE LogChainTest SET RECOVERY FULL; GO
-- 嘗試記錄備份 → 失敗:Msg 4214,無目前資料庫備份
BACKUP LOG LogChainTest TO DISK = 'C:\LogChainTest_log2.bck' WITH INIT; GO

-- 關鍵:執行差異備份(涵蓋斷裂間隙)
BACKUP DATABASE LogChainTest TO DISK = 'C:\LogChainTest_diff.bck' WITH INIT, DIFFERENTIAL; GO
-- 再次嘗試記錄備份 → 成功!
BACKUP LOG LogChainTest TO DISK = 'C:\LogChainTest_log3.bck' WITH INIT; GO

更進階:檔案/檔案組差異備份也可行

若備份策略包含檔案/檔案組備份,甚至只需單一檔案的差異備份即可重新啟動記錄鏈(前提同樣是跨度涵蓋斷裂 LSN)。

實務啟示

  • 不必為了重啟記錄鏈而強制執行完整備份(耗時、佔空間、衝擊 I/O)。
  • 差異備份通常較小、較快,是更佳選擇。
  • 記錄鏈斷裂操作:簡單復原模式切換、NO_LOG/TRUNCATE_ONLY(2008 已移除)、鏡像容錯移轉、BACKUP LOG WITH NORECOVERY 等。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved