| 維度 | BACKUP DATABASE | 檔案複製 |
|---|---|---|
| 工具 | T-SQL / SSMS / SMO | OS 複製 / 第三方備份軟體 |
| 線上操作 | 支援(快照/備份鎖定) | 需離線或脫離資料庫 |
| 還原粒度 | 完整/差異/記錄,時間點還原 | 僅能還原至複製時間點 |
| 跨版本遷移 | 需相容性處理 | 同版本/相容版本較簡單 |
| 適用場景 | 生產環境標準備份 | 開發/測試環境快速佈署、檔案級災難復原 |
-- 1. 脫離資料庫(斷開所有連線)
EXEC sp_detach_db 'test';
-- 2. OS 層面複製 test_data.mdf、test_log.ldf 至目標機器
-- 3. 附加資料庫(雙檔)
EXEC sp_attach_db
@dbname = 'test',
@filename1 = 'D:\MSSQL\Data\test_data.mdf',
@filename2 = 'D:\MSSQL\Data\test_log.ldf';
-- 4. 僅附加 MDF(自動重建 LDF)
EXEC sp_attach_single_file_db
@dbname = 'test',
@physname = 'D:\MSSQL\Data\test_data.mdf';
關鍵點:必須同時備份 .mdf(資料檔)與 .ldf(日誌檔),否則交易一致性無法保證。
直接 sp_attach_single_file_db 通常成功,會出現警告:
裝置啟動錯誤。實體檔名 '...test_Log.LDF' 可能有誤。已建立新日誌檔 '...test_log.LDF'。
資料庫上線,但未認可交易遺失。
錯誤:Msg 1813, Level 16, State 2 無法開啟新資料庫,裝置啟動錯誤。
CREATE DATABASE)_log.ldf,用來源 .mdf 覆蓋新建的 _data.mdfUSE master;
EXEC sp_configure 'allow updates', 1;
RECONFIGURE WITH OVERRIDE;
UPDATE sysdatabases SET status = -32768 WHERE dbid = DB_ID('test');
DBCC REBUILD_LOG('test', 'D:\MSSQL\Data\test_log.ldf');
若報 Msg 5030 無法獨佔鎖定,關閉企業管理器/其他連線後重試。
DBCC CHECKDB('test');
EXEC sp_dboption 'test', 'dbo use only', 'false';
EXEC sp_configure 'allow updates', 0;
RECONFIGURE WITH OVERRIDE;
allow updates 極度危險,僅限最後手段BACKUP DATABASE ... TO DISK = ... WITH COMPRESSION, ENCRYPTIONDBCC CLONEDATABASE(僅結構統計)、BACKUP/RESTORE 自動化腳本