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

SQL Server 時間點還原 (Point-in-Time Recovery) 完整操作指南

     編輯:關於SqlServer

時間點還原可將資料庫恢復至任意秒級時間點,前提是完整復原模式且具備完整備份 + 交易日誌備份鏈。

前置條件檢查

' 確認復原模式
SELECT name, recovery_model_desc FROM sys.databases WHERE name = 'pubs';
-- 必須為 FULL

' 確認備份鏈完整
SELECT * FROM msdb..backupset WHERE database_name = 'pubs' ORDER BY backup_start_date;

標準還原流程 (4 步驟)

步驟 1:尾端日誌備份 (防止資料遺失)

BACKUP LOG pubs TO DISK = 'C:\Backup\pubs_tail.trn' 
    WITH NOFORMAT, NOINIT, NAME = 'pubs_tail_log', NOSKIP, STATS = 10;

步驟 2:還原完整備份 (NORECOVERY)

RESTORE DATABASE pubs 
    FROM DISK = 'C:\Backup\pubs_full.bak' 
    WITH NORECOVERY, REPLACE, STATS = 10;

步驟 3:還原差異備份 (若有,NORECOVERY)

RESTORE DATABASE pubs 
    FROM DISK = 'C:\Backup\pubs_diff.bak' 
    WITH NORECOVERY, STATS = 10;

步驟 4:還原日誌至目標時間點 (STOPAT)

RESTORE LOG pubs 
    FROM DISK = 'C:\Backup\pubs_tail.trn' 
    WITH RECOVERY, STOPAT = '2005-07-06 17:36:00.000', STATS = 10;

關鍵參數解析

參數作用
NORECOVERY保持資料庫處於還原狀態,允許後續套用日誌
RECOVERY完成還原,資料庫上線 (最後一條日誌指定)
STOPAT指定還原截止時間點 (精確到秒/毫秒)
STOPATMARK / STOPBEFOREMARK依標記交易還原 (需 WITH MARK 備份)

多日誌檔案還原腳本範本

RESTORE DATABASE pubs FROM DISK='full.bak' WITH NORECOVERY, REPLACE;
RESTORE DATABASE pubs FROM DISK='diff.bak' WITH NORECOVERY;
RESTORE LOG pubs FROM DISK='log1.trn' WITH NORECOVERY;
RESTORE LOG pubs FROM DISK='log2.trn' WITH NORECOVERY;
RESTORE LOG pubs FROM DISK='log3.trn' WITH RECOVERY, STOPAT='2024-01-15 14:30:00';

驗證與後續動作

  1. DBCC CHECKDB (pubs) 確認邏輯一致性
  2. 核對關鍵業務表資料 (訂單、帳務、庫存)
  3. 立即執行完整備份,建立新的恢復基準點
  4. 或使用 BCP 匯出關鍵資料供業務複核

輔助工具

  • SSMS 還原對話框 → 「時間軸」視覺化選擇時間點
  • 第三方日誌讀取工具 (ApexSQL Log, SQL Log Rescue) 可預覽日誌內容再決定還原點

常見失敗原因

  • ❌ 復原模式為 SIMPLE/BULK_LOGGED
  • ❌ 缺少完整備份基準
  • ❌ 日誌備份鏈中斷 (切換復原模式、縮減日誌未全備)
  • ❌ STOPAT 時間點超出日誌涵蓋範圍
  • ❌ 尾端日誌備份失敗且資料庫已損毀 → 只能還原至最後一次日誌備份點

時間點還原是 RPO 接近零的核心能力,**完整備份 + 高頻日誌備份 + 定期還原演練**是落地關鍵。

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