D:\Backup\Finance_Full_20240115.bak。BACKUP DATABASE Finance
TO DISK = 'D:\Backup\Finance_Full_20240115.bak'
WITH COMPRESSION, CHECKSUM, STATS = 10, INIT;
GO
RESTORE DATABASE Finance
FROM DISK = 'D:\Backup\Finance_Full_20240115.bak'
WITH
REPLACE, -- 強制覆蓋現有庫
RECOVERY, -- 完成後可用(默認)
STATS = 10,
MOVE 'Finance_Data' TO 'D:\MSSQL\Data\Finance.mdf', -- 邏輯名→新物理路徑
MOVE 'Finance_Log' TO 'L:\MSSQL\Log\Finance.ldf'; -- 數據/日志分盤提升 IO
GO
查看備份文件邏輯名: RESTORE FILELISTONLY FROM DISK = '...bak'
-- 1. 切換簡單模式(斷開日志鏈,需確認不影響備份策略)
ALTER DATABASE Finance SET RECOVERY SIMPLE;
GO
-- 2. 收縮日志文件至目標大小(MB)
DBCC SHRINKFILE (Finance_Log, 500);
GO
-- 3. 恢復完整模式並立即做全備(重建日志鏈)
ALTER DATABASE Finance SET RECOVERY FULL;
BACKUP DATABASE Finance TO DISK = 'D:\Backup\Finance_Full_AfterShrink.bak' WITH COMPRESSION;
GO
⚠️ 收縮數據文件通常不推薦:導致索引碎片、後續業務寫入又需擴展,反覆震蕩。僅在一次性大量刪除數據後、確不再增長時考慮。
同上操作一二,異機只需複製 .bak 文件。
-- 源服務器:脫離
USE master;
ALTER DATABASE Finance SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
EXEC sp_detach_db 'Finance';
GO
-- 複製 .mdf .ldf 到目標服務器同路徑或新路徑
-- 目標服務器:附加
CREATE DATABASE Finance
ON (FILENAME = 'D:\MSSQL\Data\Finance.mdf'),
(FILENAME = 'L:\MSSQL\Log\Finance.ldf')
FOR ATTACH;
GO
⚠️ 附加會斷開復制/鏡像/CDC 等配置,遷移前腳本化記錄相關設置。
ALTER DATABASE ... SET SINGLE_USER WITH ROLLBACK IMMEDIATE 踢掉連接。