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

SQL Server 2008+ 誤刪/誤更新資料恢復:交易記錄尾部備份法

     編輯:SQL Server 2008

適用場景

  • 無備份或備份不夠新
  • 資料庫復原模式為「完整」或「大量記錄」
  • SQL Server 2008 及以上版本(2005 可用 Log Explorer 工具)

前提條件

  1. 資料庫復原模式 ≠ SIMPLE(簡單模式不支援記錄備份)
  2. 至少完成過一次完整備份(所有備份鏈基於完整備份)

強烈建議:生產環境務必使用「完整復原模式」,並定期做完整+記錄備份。

操作步驟

1. 確認復原模式

SELECT recovery_model, recovery_model_desc FROM sys.databases WHERE name = 'YourDB';

結果應為 FULL 或 BULK_LOGGED。

2. 建立測試資料並模擬誤刪

USE AdventureWorks;
CREATE TABLE testRestore (id INT IDENTITY(1,1), Name VARCHAR(50));
INSERT INTO testRestore(Name) VALUES ('test1'),('test2'),...('test8');

WAITFOR TIME '21:45';
DELETE FROM dbo.testRestore; -- 記住確切時間點

3. 立即執行記錄尾部備份

  • SSMS:右鍵資料庫 → 工作 → 備份 → 備份類型選「交易記錄」 → 勾選「備份記錄尾部」
  • 選項頁:勾選「驗證備份完成時」、「檢查和」、「繼續發生錯誤」、「不恢復 (NORECOVERY)」、「壓縮」
  • 確保無其他連線(尾部備份會將資料庫置於還原狀態)

對應 T-SQL:

BACKUP LOG [AdventureWorks] TO DISK = N'E:\AdventureWorks.bak'
WITH NO_TRUNCATE, NOFORMAT, NOINIT, 
NAME = N'AdventureWorks-交易記錄備份', 
SKIP, NOREWIND, NOUNLOAD, NORECOVERY, COMPRESSION, STATS=10, CHECKSUM;

4. 還原完整備份

  • 選擇最近一次完整備份檔
  • 選項頁:勾選「使資料庫處於非操作狀態,且無法記錄其他交易 (RESTORE WITH NORECOVERY)」

5. 還原記錄備份至誤操作前時間點

  • 選擇「來自裝置」→ 選剛才的尾部備份檔
  • 「時間軸」→ 選「特定日期時間」→ 設定為誤刪前一分鐘(如 21:44:59)
  • 選項頁同樣勾選 NORECOVERY

6. 恢復資料庫

  • 右鍵資料庫 → 工作 → 還原 → 資料庫 → 選「恢復資料庫 (WITH RECOVERY)」

7. 驗證資料

SELECT * FROM dbo.testRestore; -- 應出現 8 筆測試資料

限制與風險

  1. 還原後,誤操作時間點之後的所有交易將遺失
  2. 操作期間資料庫處於單用戶/還原狀態,業務中斷
  3. 核心資料表建議額外做表級備份或啟用 CDC/Change Tracking
復原模式檢查
屬性頁
查詢結果
備份歷史
測試資料
誤刪後
尾部備份選項
備份選項頁
還原中狀態
還原完整備份
NORECOVERY選項
還原記錄
時間點選擇
尾部備份選取
驗證成功
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved