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

SQL Server 交易記錄還原實戰:完整備份 + 記錄備份實現時間點恢復

     編輯:關於SqlServer

誤刪資料、誤更新是資料庫運維噩夢。本文以實測流程示範:在「完整復原模式」下,利用「完整備份 + 交易記錄備份」實現時間點還原,找回誤刪資料。

⚠️ 前提條件

  • 資料庫復原模式 = FULL(完整),非 SIMPLE。
  • 關閉「自動關閉」與「自動收縮」。
  • 已有至少一次 完整備份 作為基準。

一、建立測試環境

CREATE DATABASE zp;
GO
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 = N'C:\k.bak'
WITH NOFORMAT, NOINIT, NAME = N'zp-完整備份', STATS = 10;

三、模擬誤刪並記錄時間

DELETE FROM [zping.com] WHERE id IN (1,2);  -- 假設 10:15 執行
-- 記下大約時間:2024-01-15 10:15:00

四、立即進行記錄備份(捕獲誤刪操作)

BACKUP LOG [zp] TO DISK = N'C:\k_log.trn'
WITH NOFORMAT, NOINIT, NAME = N'zp-記錄備份_誤刪後', STATS = 10;

五、還原至新資料庫並指定時間點

  1. 將原 zp 改名或離線,避免衝突。
  2. 在 SSMS「還原資料庫」→「裝置」選 C:\k.bak。
  3. 關鍵:選項頁面 → 復原狀態 = 「RESTORE WITH NORECOVERY」(不回滾未認可交易)。
  4. 完成後資料庫處於 Restoring... 狀態。

六、還原記錄備份並指定停止時間

  1. 右鍵資料庫 → 任務 → 還原 → 交易記錄。
  2. 選 C:\k_log.trn。
  3. 時間軸 → 指定「2024-01-15 10:14:59」(誤刪前一秒)。
  4. 復原狀態 = 「RESTORE WITH RECOVERY」(回滾未認可交易,帶上線)。

七、驗證結果

USE zp_restored;
SELECT * FROM [zping.com];  -- id 1、2 應重新出現

八、生產環境最佳實踐

策略頻率說明
完整備份每日/每週大型庫可配合差異備份減少完整備份頻率
記錄備份每 15~60 分鐘RPO(資料遺失容忍度)決定頻率
備份驗證每週RESTORE VERIFYONLY 或實測還原
異地備份即時/每日異地容災,防機房級故障

九、常見錯誤與對策

  • LSN 斷裂:記錄備份鏈中斷(如切換為 SIMPLE 模式、手動 TRUNCATE LOG)。對策:立即補一次完整備份重新啟動鏈。
  • 時間點過早/過晚:還原時間超出記錄備份涵蓋範圍。對策:確認 msdb.dbo.backupset 的 first_lsn/last_lsn 連續性。
  • 空間不足:還原需足夠磁碟空間。對策:規劃專用備份磁碟,監控剩餘空間。

掌握「完整備份 + 記錄備份 + 時間點還原」鐵三角,即可從容應對人為誤操作,將 RPO 壓縮至分鐘級,守護核心資料資產。

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