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

SQL Server 交易記錄檔維護完整指南:備份、截斷、壓縮與災難復原

     編輯:關於SqlServer

交易記錄檔角色

記錄所有資料庫修改操作,確保 ACID 特性。每筆交易從 BEGIN 到 COMMIT/ROLLBACK 完整記錄。支援:

  • 交易復原(Rollback)
  • 資料庫還原至特定時間點
  • 高可用性技術(鏡像、AlwaysOn、Log Shipping、異動複寫)

常見問題:記錄檔無限成長

  • 預設復原模式為完整復原模式,若未定期進行記錄備份,記錄檔會持續增長佔滿磁碟。
  • 簡單復原模式下,檢查點自動截斷非作用部分,但無法進行時間點還原。

維護三部曲:備份 → 截斷 → 壓縮

1. 定期記錄備份(核心)

BACKUP LOG [MyDB] TO DISK = 'D:\Backup\MyDB_Log_20240115.trn'
WITH COMPRESSION, CHECKSUM;
  • 備份完成後,對應的虛擬記錄檔(VLF)標記為非作用,可被覆寫。
  • 建議頻率:依 RPO 定,通常 15-60 分鐘一次。

2. 截斷與壓縮的差異

3. 壓縮指令

-- 壓縮特定資料庫的記錄檔(指定目標大小 MB)
DBCC SHRINKFILE (N'MyDB_Log', 1024);  -- 縮至 1GB

-- 或壓縮整個資料庫(含資料檔)
DBCC SHRINKDATABASE (MyDB, 10);  -- 保留 10% 可用空間
  • 壓縮為線上操作,但會產生 I/O 與鎖定,建議離峰時段執行。
  • 頻繁壓縮會導致檔案反覆增長/縮減(碎片化),建議設定合理初始大小與自動成長增量(固定 MB,非百分比),減少壓縮需求。

復原模式選擇指南

動作效果釋放磁碟空間
截斷標記 VLF 為非作用,允許循環覆寫否(檔案大小不變)
壓縮實際移除檔案尾端非作用 VLF,縮減檔案大小是

災難復原:記錄備份還原流程

  1. 還原完整備份:RESTORE DATABASE MyDB FROM DISK='...' WITH NORECOVERY, REPLACE;
  2. 依序還原差異備份(如有):WITH NORECOVERY
  3. 依時間順序還原所有記錄備份:WITH NORECOVERY
  4. 最後一筆記錄備份可用 WITH RECOVERY 或 STOPAT = '時間點' 完成還原。

Log Shipping:異地備援方案

  • 主伺服器定期備份記錄 → 複製至備援伺服器 → 自動還原(STANDBY 模式可唯讀查詢)。
  • 提供資料庫層級的高可用性與災難復原,RTO 取決於備份頻率與網路傳輸時間。

最佳實務清單

  1. 所有生產資料庫設為完整復原模式並建立記錄備份排程。
  2. 監控記錄檔使用率(DBCC SQLPERF(LOGSPACE)),設定警示 > 80%。
  3. 預先配置足夠初始大小(如 4GB),自動成長設為固定 512MB/1GB。
  4. 定期檢視 VLF 數量(DBCC LOGINFO),過多 VLF(>1000)會拖慢啟動/還原,需重建記錄檔。
  5. 備份檔案異地儲存,定期演練還原流程。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
模式記錄備份時間點還原適用場景
完整必要支援生產環境、需最小資料遺失
大量記錄必要支援(部分大量作業最小記錄)大量匯入/索引重建期間暫時切換
簡單不可不支援開發/測試、資料可重載、RPO=24hr