首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL Server 時間點還原實戰:透過交易記錄檔復原誤刪資料

     編輯:MySQL 資料庫相關知識

    前置條件

    • 資料庫復原模式設為 完整 (FULL),非簡單模式
    • 關閉 Auto Close、Auto Shrink
    • 擁有最近一次 完整備份 及後續 交易記錄備份

    測試場景重現

    -- 建立測試環境
    CREATE DATABASE zp;
    USE zp;
    CREATE TABLE [zping.com] (id INT, name VARCHAR(20));
    INSERT INTO [zping.com] VALUES (1,'zping.com1'),(2,'zping.com2'),(3,'zping.com3'),(4,'zping.com4');
    
    -- 完整備份
    BACKUP DATABASE [zp] TO DISK = 'C:\backup\zp_full.bak' WITH INIT, FORMAT;
    
    -- 模擬誤刪(記住大約時間)
    DELETE FROM [zping.com] WHERE id IN (1,2); -- 假設 14:30 執行

    還原步驟(圖文流程文字版)

    1. 建立新資料庫 接收還原(原庫改名備份)
    2. 還原完整備份:
      裝置 → 選擇 zp_full.bak → 選項頁勾選 「不回滾未認可的交易 (NORECOVERY)」 → 確定
      此時資料庫處於 Restoring... 狀態
    3. 還原交易記錄備份至誤刪前時間點:
      右鍵資料庫 → 任務 → 還原 → 交易記錄 → 選擇記錄備份檔 → 選項頁:
       • 恢復狀態 選 「回滾未認可的交易 (RECOVERY)」
       • 時間點 設為誤刪前幾分鐘(如 14:29) → 確定
    4. 驗證:查詢資料表,id 1、2 已恢復

    關鍵參數解析

    階段恢復選項意義
    完整備份還原NORECOVERY保持資料庫不可用,允許後續套用記錄備份
    記錄備份還原(最後一檔)RECOVERY完成還原,資料庫上線可讀寫
    記錄備份還原(中間檔)NORECOVERY繼續套用下一檔記錄

    常見錯誤與對策

    • LSN 斷鏈 (Too early/late):記錄備份序列不連續 → 檢查備份排程、確保無遺漏、按順序還原
    • 記錄備份檔遺失:只能還原至最後可用記錄備份時間點,資料損失不可避免 → 建議異地同步備份檔
    • 資料庫過大無法還原:採用檔案群組分檔備份、或啟用壓縮備份 WITH COMPRESSION

    企業級擴展:鏡像與 AlwaysOn

    SQL Server 2005+ 推出的 資料庫鏡像、2012+ AlwaysOn 可用性群組,本質皆為同步傳送交易記錄至次要節點,實現近乎零資料遺失 (RPO≈0) 的高可用架構,原理與本文手動時間點還原一脈相承。

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