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

SQL Server 差異備份還原實戰:從完整備份到差異備份的正確鏈路

     編輯:MySQL 資料庫相關知識

場景重現

測試環境:SQL Server(非 MySQL)。操作序列:

  1. 建立資料庫 test、資料表 t(a int)。
  2. 插入 1 → 完整備份 File=1。
  3. 插入 2 → 完整備份 File=2(覆蓋同一文件)。
  4. 插入 3、4 → 差異備份 File=3 WITH DIFFERENTIAL。
  5. 刪除所有資料,需還原至「1,2,3,4」狀態。

關鍵原則

差異備份必須建立在最近一次完整備份之上。還原時需先還原該完整備份(NORECOVERY),再還原差異備份(RECOVERY)。

正確還原語句

-- 1. 還原最近一次完整備份 (File=2)
RESTORE DATABASE test FROM DISK='c:\test.bak' WITH FILE=2, NORECOVERY;

-- 2. 還原差異備份 (File=3)
RESTORE DATABASE test FROM DISK='c:\test.bak' WITH FILE=3, RECOVERY;

驗證備份集編號

查詢 msdb..backupset 確認 position(檔案序號)與 type(D=完整、I=差異):

SELECT backup_start_date AS 備份時間,
       position AS 備份號,
       CASE type WHEN 'D' THEN '完整備份' WHEN 'I' THEN '差異備份' END AS 備份類型
FROM msdb..backupset
WHERE database_name='test'
  AND media_set_id IN (
      SELECT DISTINCT media_set_id
      FROM msdb..backupmediafamily
      WHERE physical_device_name='c:\test.bak')
ORDER BY position;

常見誤區

  • 嘗試單獨還原差異備份 → 失敗。
  • 還原舊的完整備份(File=1)再套用新差異 → 鏈路斷裂。
  • 兩條 RESTORE 未放在同一批次/事務中 → 狀態不一致。

完整可執行測試腳本

文末提供從建庫、備份、刪除、還原到驗證的完整 T-SQL 腳本,可直接在 SSMS 執行複現。

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