測試環境:SQL Server(非 MySQL)。操作序列:
test、資料表 t(a int)。File=1。File=2(覆蓋同一文件)。File=3 WITH DIFFERENTIAL。差異備份必須建立在最近一次完整備份之上。還原時需先還原該完整備份(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;
文末提供從建庫、備份、刪除、還原到驗證的完整 T-SQL 腳本,可直接在 SSMS 執行複現。