資料檔 (.mdf/.ndf) 與記錄檔 (.ldf) 操作產生大量 I/O,**分離至不同物理磁碟/RAID 陣列**可:
-- 確保備份目錄已存在
BACKUP DATABASE MyDB
TO DISK = 'D:\DBBackup\MyDB_Full_20240115.bak'
WITH INIT, COMPRESSION, CHECKSUM, STATS = 5
-- INIT: 覆寫既有備份組
-- COMPRESSION: 壓縮備份 (SQL 2008+)
-- CHECKSUM: 頁面校驗和
-- STATS: 進度報告間隔
BACKUP DATABASE MyDB
TO DISK = 'D:\DBBackup\MyDB_Diff_20240115_1400.bak'
WITH DIFFERENTIAL, COMPRESSION, STATS = 5
BACKUP LOG MyDB
TO DISK = 'D:\DBBackup\MyDB_Log_20240115_1430.trn'
WITH COMPRESSION, STATS = 5
-- 1. 尾部記錄備份 (若記錄檔磁碟正常)
BACKUP LOG MyDB TO DISK = 'D:\DBBackup\MyDB_TailLog.trn' WITH NORECOVERY
-- 2. 切換單用戶模式斷開連線
USE master
ALTER DATABASE MyDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE
-- 3. 還原完整備份 (NORECOVERY 保留後續還原)
RESTORE DATABASE MyDB
FROM DISK = 'D:\DBBackup\MyDB_Full_20240115.bak'
WITH NORECOVERY, REPLACE, STATS = 5,
MOVE 'MyDB_Data' TO 'E:\SQLData\MyDB.mdf', -- 重新定位資料檔
MOVE 'MyDB_Log' TO 'F:\SQLLog\MyDB.ldf' -- 重新定位記錄檔 (分離儲存)
-- 4. 還原差異備份 (若有)
RESTORE DATABASE MyDB
FROM DISK = 'D:\DBBackup\MyDB_Diff_20240115_1400.bak'
WITH NORECOVERY, STATS = 5
-- 5. 依序還原記錄檔備份
RESTORE LOG MyDB FROM DISK = 'D:\DBBackup\MyDB_Log_20240115_1430.trn' WITH NORECOVERY
-- ... 更多記錄檔 ...
-- 6. 還原尾部記錄 (若步驟 1 成功)
RESTORE LOG MyDB FROM DISK = 'D:\DBBackup\MyDB_TailLog.trn' WITH NORECOVERY
-- 7. 恢復資料庫上線
RESTORE DATABASE MyDB WITH RECOVERY
-- 8. 恢復多用戶模式
ALTER DATABASE MyDB SET MULTI_USER
CREATE PROC KillSpid(@DBName sysname)
AS
BEGIN
DECLARE @spid int, @sql nvarchar(max)
-- 動態建立游標殺掉所有連線
SET @sql = N'DECLARE c CURSOR FOR SELECT spid FROM sysprocesses WHERE dbid = DB_ID(''' + @DBName + ''')'
EXEC sp_executesql @sql
DECLARE c CURSOR FOR SELECT spid FROM sysprocesses WHERE dbid = DB_ID(@DBName)
OPEN c
FETCH NEXT FROM c INTO @spid
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC ('KILL ' + @spid)
FETCH NEXT FROM c INTO @spid
END
CLOSE c
DEALLOCATE c
END
GO
-- 使用範例
EXEC KillSpid 'MyDB'
-- 緊接著 ALTER DATABASE MyDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE
| 項目 | 建議 |
|---|---|
| 備份路徑 | 獨立磁碟/網路共享,非資料/記錄檔同磁碟 |
| 檔名規範 | 含資料庫名、備份類型、時間戳 (如 DB_Full_yyyymmdd_HHMM.bak) |
| 驗證機制 | 定期 RESTORE VERIFYONLY、DBCC CHECKDB 於備份檔 |
| 保留策略 | 完整備份保留 2 週、差異 1 週、記錄 3 天;異地複製 |
| 監控警報 | 備份失敗/耗時異常/磁碟空間不足 → 即時通知 |
資料與記錄檔分離儲存是 SQL Server 架構設計的基石。配合標準化備份/還原腳本、尾部記錄備份、單用戶切換與連線清理流程,可構建 RPO 接近零、RTO 可控的災難恢復能力。