SQL Server 透過 BACKUP DATABASE 與 RESTORE DATABASE 實現檔案級備份還原,適用於單機遷移、災難恢復、環境複製等場景。
-- 備份資料庫 mydb 到指定路徑 BACKUP DATABASE mydb TO DISK = 'C:\DBBACK\mydb.BAK' WITH FORMAT, INIT, NAME = 'mydb-Full Backup', STATS = 10; -- 參數說明: -- FORMAT: 覆寫現有媒體標頭 -- INIT: 覆寫現有備份集 -- STATS=10: 每 10% 顯示進度
關鍵注意事項:
C:\DBBACK\ 必須預先存在,SQL Server 不會自動建立mydb_20240115_1430.BAKsysadmin 或 db_backupoperator 角色權限-- 切換至 master 避免鎖定目標資料庫
USE master;
-- 強制還原(覆蓋現有資料庫)
RESTORE DATABASE mydb
FROM DISK = 'C:\DBBACK\mydb.BAK'
WITH REPLACE,
MOVE 'mydb' TO 'C:\Data\mydb.mdf', -- 資料檔新路徑
MOVE 'mydb_log' TO 'C:\Log\mydb_log.ldf', -- 日誌檔新路徑
STATS = 10;
常見失敗原因與解決:
MOVE 子句指定新路徑當資料庫被佔用無法還原時,執行以下流程:
CREATE PROC sp_KillDbConnections @DBName sysname
AS
BEGIN
DECLARE @spid INT, @sql NVARCHAR(MAX) = N'';
SELECT @sql = @sql + N'KILL ' + CAST(spid AS NVARCHAR) + N'; '
FROM sys.sysprocesses
WHERE dbid = DB_ID(@DBName) AND spid != @@SPID;
EXEC sp_executesql @sql;
END;
-- 1. 殺掉所有連線 EXEC sp_KillDbConnections 'mydb'; -- 2. 設為單用戶模式(立即生效,ROLLBACK IMMEDIATE 強制回滾未完成事務) ALTER DATABASE mydb SET SINGLE_USER WITH ROLLBACK IMMEDIATE; -- 3. 執行還原(此時擁有獨佔權限) RESTORE DATABASE mydb FROM DISK = 'C:\DBBACK\mydb.BAK' WITH REPLACE, ...; -- 4. 還原完成後恢復多用戶模式 ALTER DATABASE mydb SET MULTI_USER;
| 策略 | 頻率 | 優點 | 缺點 |
|---|---|---|---|
| 完整備份 | 每日/每週 | 還原最簡單、最快 | 耗時長、佔空間大 |
| 差異備份 | 每小時/每日 | 僅備份變更頁、較小 | 還原需完整+最新差異 |
| 交易記錄備份 | 每 15-60 分鐘 | 可時間點恢復、RPO 近乎為零 | 需完整復原模式、管理複雜 |
-- 每日 02:00 完整備份 -- 每 6 小時差異備份 -- 每 15 分鐘記錄備份
-- 僅驗證備份檔完整性,不還原 RESTORE VERIFYONLY FROM DISK = 'C:\DBBACK\mydb.BAK'; -- 查看備份集詳細資訊 RESTORE HEADERONLY FROM DISK = 'C:\DBBACK\mydb.BAK'; -- 查看檔案清單(還原時需 MOVE 的邏輯名) RESTORE FILELISTONLY FROM DISK = 'C:\DBBACK\mydb.BAK';
DECLARE @path NVARCHAR(256) = N'C:\DBBACK\'; DECLARE @dbName NVARCHAR(128) = N'mydb'; DECLARE @fileName NVARCHAR(256) = @path + @dbName + N'_' + CONVERT(NVARCHAR(8), GETDATE(), 112) + N'_' + REPLACE(CONVERT(NVARCHAR(5), GETDATE(), 108), ':', '') + N'.BAK'; BACKUP DATABASE @dbName TO DISK = @fileName WITH COMPRESSION, CHECKSUM, STATS = 10;
掌握 BACKUP/RESTORE 核心語法、強制斷開連線技巧、多層次備份策略與驗證機制,是 DBA 確保資料安全的基石。建議將備份還原流程文檔化、自動化,並定期演練災難恢復,確保關鍵時刻「備份能還原、還原不丟數據」。