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

SQL Server 備份還原全攻略:完整/差異/記錄備份、還原序列、分區檔案處理

     編輯:關於SqlServer

備份類型核心差異

類型備份內容依賴基礎存檔屬性適用場景
完整備份所有資料頁無清除基礎備份、較小資料庫
差異備份上次完整備份後變更最後完整備份保留日常備份、縮短備份窗口
記錄備份交易記錄區間完整/差異備份 + 記錄鏈清除時間點還原、高頻率保護
檔案/檔案組備份指定檔案/組視復原模式-超大型資料庫、分區管理

記錄鏈 與 復原模式

  • 完整/大量記錄復原模式:支援記錄備份,維持記錄鏈連續
  • 簡單復原模式:自動截斷記錄,無法進行記錄備份
  • 記錄鏈中斷:切換復原模式、覆寫備份集會重新開始記錄鏈

實戰還原序列 (完整 → 差異 → 記錄)

場景建立

-- 建立測試資料庫與備份序列
CREATE DATABASE TestBackup;
-- 1. 完整備份 (建立 Table1 後)
BACKUP DATABASE TestBackup TO DISK = 'TestBackupDB-full.bak';
-- 2. 差異備份 (建立 Table2 後)
BACKUP DATABASE TestBackup TO DISK = 'TestBackupDB-diff.bak' WITH DIFFERENTIAL;
-- 3. 記錄備份 (建立 Table3 後)
BACKUP LOG TestBackup TO DISK = 'TestBackupDB-log.bak';

還原步驟 (目標資料庫 TestBackup2)

  1. 還原完整備份 - NORECOVERY
    RESTORE DATABASE TestBackup2 
    FROM DISK = 'TestBackupDB-full.bak'
    WITH NORECOVERY, 
    MOVE 'TestBackup' TO 'C:\Data\TestBackup2.mdf',
    MOVE 'TestBackup_log' TO 'C:\Log\TestBackup2.ldf';
  2. 還原差異備份 - NORECOVERY
    RESTORE DATABASE TestBackup2 
    FROM DISK = 'TestBackupDB-diff.bak'
    WITH NORECOVERY;
  3. 還原記錄備份 - RECOVERY (預設)
    RESTORE LOG TestBackup2 
    FROM DISK = 'TestBackupDB-log.bak'
    WITH RECOVERY; -- 或指定 STOPAT 還原至特定時間點

關鍵原則

  • 除最後一個還原外,所有前置還原必須指定 NORECOVERY
  • 記錄備份必須按順序還原,不可跳過
  • STOPAT 可實現時間點還原 (Point-in-Time Recovery)

分區資料庫 (多 NDF 檔案) 還原進階

情境一:目標已有對應檔案組/檔案

在還原介面「還原為」欄位修改對應的實體檔案路徑即可。

情境二:剛建立新檔案組/檔案遭遇錯誤

錯誤: 「檔案已存在」或存取衝突

解決方案:

  1. 重啟 SQL Server 服務
  2. 或設定資料庫限制存取:ALTER DATABASE TestBackup2 SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

備份策略範例:生產環境週期規劃

時間操作保留
週日 02:00完整備份4 週
每日 02:00差異備份2 週
每 4 小時記錄備份3 天
故障發生尾記錄備份 (TAIL LOG)-

災難復原演練關鍵步驟

  1. 驗證備份完整性:RESTORE VERIFYONLY FROM DISK = '...'
  2. 檢視備份內容:RESTORE FILELISTONLY / HEADERONLY
  3. 異地備份複製與加密
  4. 定期演練完整還原流程 (含時間點還原)
  5. 文件化 RTO/RPO 目標與實測數據
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved