SQL Server 採用預寫日誌機制:資料修改先寫入記憶體緩存,同步記錄到事務日誌;資料檔案異步寫入。事務日誌記錄了每一筆修改的完整資訊,是資料庫恢復、高可用、一致性的基石。
斷電、藍屏等導致實例異常終止,記憶體中未刷新到磁碟的修改面臨丟失風險。
重啟實例時,SQL Server 對每個資料庫執行恢復操作:
若事務日誌損壞或不可用,恢復將失敗。故障發生時首要確認日誌可用性,必要時先修復日誌再啟動實例。
兩大基於日誌傳輸的高可用方案:
| 方案 | 模式 | 同步機制 | 適用場景 |
|---|---|---|---|
| 日誌傳送 | 非同步 | 主庫備份日誌 → 複製到從庫 → 還原應用 | 容忍分鐘級延遲、多從庫、成本敏感 |
| 資料庫鏡像 | 同步/非同步可選 | 主庫每筆日誌即時發送 → 鏡像庫重放 | 高可用要求高、自動故障轉移、單從庫 |
兩者均要求資料庫使用完整恢復模式或大量記錄恢復模式。
轉賬:扣款成功、入賬失敗 → 資料不一致。
應用程式捕獲異常後執行 ROLLBACK,資料庫引擎利用事務日誌撤銷已完成的扣款操作,恢復一致性。這是事務原子性的典型應用。
上午 11 點故障,上次完整備份是昨晚 12 點。僅靠完整備份會丟失 11 小時資料。
前提:事務日誌完整、未截斷、採用完整恢復模式。
RESTORE LOG ... WITH STOPAT 時間點恢復語法事務日誌不僅是恢復的「時光機」,更是高可用架構的「生命線」。DBA 應將日誌管理納入核心運維體系,做到有備無患。