當資料庫完整備份大小超過任一單一磁碟剩餘空間時,傳統備份會失敗。本文介紹備份檔案分割技術,將單一備份拆分寫入多個磁碟,解決空間不足難題,並完整示範備份與還原流程。
DECLARE @CurrentTime VARCHAR(50), @FileName VARCHAR(200);
SET @CurrentTime = REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120), '-', '_'), ' ', '_'), ':', '');
SET @FileName = 'C:\Temp2_FullBackup_' + @CurrentTime + '.bak';
BACKUP DATABASE [Temp2] TO DISK = @FileName WITH FORMAT;
結果:產生單一 31MB 備份檔。
DECLARE @CurrentTime VARCHAR(50), @FileName1 VARCHAR(200), @FileName2 VARCHAR(200);
SET @CurrentTime = REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120), '-', '_'), ' ', '_'), ':', '');
SET @FileName1 = 'C:\Temp2_FullBackup_Part1_' + @CurrentTime + '.bak';
SET @FileName2 = 'D:\Temp2_FullBackup_Part2_' + @CurrentTime + '.bak';
BACKUP DATABASE [Temp2]
TO DISK = @FileName1, DISK = @FileName2
WITH FORMAT;
結果: 產生兩個 16MB 檔案 (平均分割),總大小不變。
任一分割檔均可查詢完整中繼資料:
RESTORE FILELISTONLY FROM DISK = 'C:\...\Part1_...bak';
RESTORE HEADERONLY FROM DISK = 'D:\...\Part2_...bak';
USE [master];
RESTORE DATABASE [Temp2]
FROM DISK = N'D:\...\Part1_...bak',
DISK = N'D:\...\Part2_...bak'
WITH FILE = 1,
MOVE N'Temp' TO N'E:\DataBase\Temp2.mdf',
MOVE N'Temp_log' TO N'E:\DataBase\Temp2_log.ldf',
NOUNLOAD, REPLACE, STATS = 5;
關鍵點: 還原時必須同時指定所有分割檔案路徑,順序不影響。實務上通常將分割檔集中複製到同一目錄再還原。
| 適用場景 | 不適用/注意事項 |
|---|---|
| 單一磁碟空間不足但多磁碟總和足夠 | 分割檔遺失任一即無法還原,備份管理複雜度增加 |
| 叢集/遠端環境無法掛載外部儲存 | 還原時需所有分割檔可同時存取 |
| 大型資料庫平行寫入提升備份速度 | 不支援鏡像備份 (MIRROR TO) |
備份檔案分割是解決「單一磁碟空間不足但總空間充足」的實用技巧。生產環境建議配合備份壓縮 (WITH COMPRESSION) 進一步減少空間需求,並建立自動化腳本管理分割檔案的生命週期。