資料庫備份還原是 DBA 核心基本功。本文對比 SSMS 圖形化介面與 T-SQL 腳本兩種方式,並給出生產環境可直接套用的參數化還原腳本模板。
.bak 檔案。DBTest)。.mdf、.ldf 新路徑,避免覆蓋原庫。
/* 參數區 ---*/
DECLARE @SrcDb SYSNAME = 'DB'; -- 來源資料庫
DECLARE @BakPath NVARCHAR(260) = 'E:\DBTest.bak';
DECLARE @TargetDb SYSNAME = 'DBTest'; -- 目標資料庫
DECLARE @DataPath NVARCHAR(260) = 'E:\MSSQL\Data\';
DECLARE @LogPath NVARCHAR(260) = 'E:\MSSQL\Log\';
/* ----------*/
-- 1. 完整備份
BACKUP DATABASE @SrcDb TO DISK = @BakPath
WITH INIT, COMPRESSION, STATS = 10;
-- 2. 檢視備份檔邏輯檔名(還原時需用)
RESTORE FILELISTONLY FROM DISK = @BakPath;
-- 3. 還原為新資料庫(假設邏輯檔名為 DBTest / DBTest_log)
RESTORE DATABASE @TargetDb FROM DISK = @BakPath
WITH
MOVE 'DBTest' TO @DataPath + @TargetDb + '.mdf',
MOVE 'DBTest_log' TO @LogPath + @TargetDb + '_log.ldf',
STATS = 10, -- 每 10% 回報進度
REPLACE; -- 強制覆蓋同名資料庫
| 參數 | 說明 |
|---|---|
| STATS = 10 | 每完成 10% 輸出一行進度訊息,監控大型庫還原進度必備 |
| REPLACE | 允許覆蓋同名資料庫,自動化腳本必加 |
| MOVE | 將備份檔內的邏輯檔對應到新的實體路徑,支援異機還原、磁碟重組 |
| COMPRESSION | 備份壓縮(Enterprise/Standard 2008R2+),縮小 60~80% 體積、加快 I/O |
| NORECOVERY | 後續仍需還原差異/記錄備份時使用,資料庫保持 Restoring 狀態 |
DECLARE @Sql NVARCHAR(MAX) = N'';
SELECT @Sql += N'
RESTORE DATABASE ' + QUOTENAME(@TargetDb) + N' FROM DISK = ' + QUOTENAME(@BakPath, '''') + N'
WITH '
+ STRING_AGG(
CASE type WHEN 'D'
THEN N'MOVE ' + QUOTENAME(logical_name) + N' TO ' + QUOTENAME(@DataPath + @TargetDb + '.mdf', '''')
ELSE N'MOVE ' + QUOTENAME(logical_name) + N' TO ' + QUOTENAME(@LogPath + @TargetDb + '_log.ldf', '''')
END, N', ')
+ N', STATS = 10, REPLACE;'
FROM (
SELECT logical_name, type
FROM OPENROWSET('SQLNCLI', 'Server=.;Trusted_Connection=yes;',
'RESTORE FILELISTONLY FROM DISK = ' + QUOTENAME(@BakPath, ''''))
) AS f;
EXEC sp_executesql @Sql;
註:需啟用 Ad Hoc Distributed Queries 或改用臨時表接收 FILELISTONLY 結果。
RESTORE VERIFYONLY FROM DISK = ...DBCC CHECKDB 確保一致性EXEC sp_updatestatsEXEC sp_change_users_login 'Auto_Fix', 'user'熟練掌握 T-SQL 還原腳本,即可將備份還原納入 CI/CD 流程,實現資料庫版本化部署與災難演練自動化。